2017-07-21 6 views
0

バックエンドジョブのテストをいくつか書いていますが、rspecで私のメソッドを見つけられないという奇妙な問題があります。Rspecがクラスメソッドを見つけられません

私はこの問題を説明するために単純なクラス&テストを書いた:

アプリ/相互作用/ tmp_test.rb:

class TmpTest 
    def call 
    a = 10 
    b = 5 
    b.substract_two 
    return a + b 
    end 

    def substract_two 
    c = self - 2 
    return c 
    end 
end 

スペック/相互作用/ tmp_test.rb:

require 'rails_helper' 

describe TmpTest do 
    context 'when doing the substraction' do 
    it 'return the correct number' do 
     expect(described_class.call).to eq(13) 
    end 
    end 
end 

出力:

TmpTest 
    when doing the substraction 
    return the correct number (FAILED - 1) 

Failures: 

    1) TmpTest when doing the substraction return the correct number 
    Failure/Error: expect(described_class.call).to eq(13) 

    NoMethodError: 
     undefined method `call' for TmpTest:Class 
    # ./spec/interactors/tmp_test.rb:6:in `block (3 levels) in <top (required)>' 

Finished in 0.00177 seconds (files took 1.93 seconds to load) 
1 example, 1 failure 

Failed examples: 

rspec ./spec/interactors/tmp_test.rb:5 # TmpTest when doing the substraction return the correct number 
+1

元の質問の編集をやめ、変更を元に戻してください。 – mudasobwa

答えて

1

これはクラスメソッドではなく、インスタンスメソッドです。テストは次のようになります。

describe TmpTest do 
    subject(:instance) { described_class.new } 

    context 'when doing the subtraction' do 
    it 'returns the correct number' do 
     expect(instance.call).to eq(13) 
    end 
    end 
end 
+0

クラスメソッドとインスタンスメソッドの混乱を指摘していただきありがとうございます。ただし、2番目のメソッドに問題はありますが、元の投稿を編集します。 –

+0

これはすべてクールですが、あなたは飛行機の狩猟を見逃しました:) – mudasobwa

+0

@mudasobwa: 'b.subtract_two'?それを見逃しませんでした。それは質問の範囲外だった:) –

0

これは完全な混乱です。コメントと修正されたバージョン:

また
class TmpTest 
    def call 
    a = 10 
    b = 5 
    # b.substract_two # why do you call method of this class on b?! 
    a + subtract_two(b) 
    end 

    def substract_two(from) 
    from - 2 
    end 
end 

:メソッドの非常に最後の行にreturnを使用しないでください。

+0

確かに私のコードはここで非常に悪い品質です、私はちょうど急いでそれを書いた 問題が間違った要素(b) でクラスメソッド(substract_two)を呼び出していたことがわかりました。 –

+0

質問している問題を解決したので、セルジオの答えは私のものではなく、受け入れるべきです。 – mudasobwa

+0

私の "本当の"問題(このコードは私のアプリケーションのコードを模倣しています)は実際には間違った要素のクラスメソッドを呼び出すようにリンクされていました。 –

関連する問題