2017-01-23 8 views
1

I持って自分のモジュールに次のテスト場合

module SimilarityMachine 

... 

    def answers_similarity(answer_1, answer_2) 
    if answer_1.compilation_error? && answer_2.compilation_error? 
     return compiler_output_similarity(answer_1, answer_2) 
    elsif answer_1.compilation_error? || answer_2.compilation_error? 
     return source_code_similarity(answer_1, answer_2) 
    else 
     content_sim = source_code_similarity(answer_1, answer_2) 
     test_cases_sim = test_cases_output_similarity(answer_1, answer_2) 
     answers_formula(content_sim, test_cases_sim) 
    end 
    end 

... 

end 

が、私はこれらの「条件があれば」、(右メソッドが呼び出されることを保証するために、これらすべてをテストしたいと思います方法は、SimilarityMachineモジュールからである)。これを行うには、私が持っている:私は右ifに行く(最初、私は前にテストしたので、私はそれを確信している)作成した両方の答えと

describe SimilarityMachine do 
    describe '#answers_similarity' do 
    subject { answers_similarity(answer_1, answer_2) } 
    let(:answer_1) { create(:answer, :invalid_content) } 

    context "when both answers have compilation error" do 
     let(:answer_2) { create(:answer, :invalid_content) } 

     it "calls compiler_output_similarity method" do 
     expect(described_class).to receive(:compiler_output_similarity) 
     subject 
     end 
    end 
end 

。しかし、結果は

1) SimilarityMachine#answers_similarity when both answers have compilation error calls compiler_output_similarity method 
    Failure/Error: expect(described_class).to receive(:compiler_output_similarity) 

     (SimilarityMachine).compiler_output_similarity(*(any args)) 
      expected: 1 time with any arguments 
      received: 0 times with any arguments 

私は間違っていますか?

答えて

1

モジュールテストに関するその他の質問Testing modules in rspecをチェックします。

これでは完全にはわかりませんが、一般的に、モジュールはメソッド呼び出しを受け取りません。これらは、extendメソッドなどを介して「混在」しなければならないメソッドのコレクションです。

ここhttps://semaphoreci.com/community/tutorials/testing-mixins-in-isolation-with-minitest-and-rspecから採取し、分離してモジュール方式をテストする方法の例は次のとおり

describe FastCar 
    before(:each) do 
    @test_obj = Object.new 
    @test_obj.extend(Speedable) 
    end 

    it "reports the speed" do 
    expect(@test_obj.speed).to eq "This car runs super fast!" 
    end 
end 
+0

パーフェクト、@PeterAlfvin。モジュールをオブジェクトに追加し、テストでこのオブジェクトをチェックしました。出来た! – rwehresmann

関連する問題