2017-02-02 6 views
2

if条件が満たされたとき(DispatchMessengerのインスタンスを作成する)に次のメソッドのテストを作成しようとしています。クラスで呼び出された#newがあるかどうかを確認するrspecテスト

class Telephony 
    def self.receive(body, opts = {}) 

    responder = Responder.find_by_phone(opts[:from]) 

    if responder 
     msg = DispatchMessenger.new(responder) 
    else 
     send("#{opts[:from]}: #{opts[:body]}", to: Rails.configuration.backup_sms_phone) 
    end 

    end 
end 

rspecにはこれがあります。

describe '#receive' do 

    let(:responder)  { create(:user, :responder, phone: '666-555-4444', name: 'Roy the Responder') } 

    it "creates an instance of DispatchMessenger when passed a responder's number" do 
    expect(DispatchMessenger).to receive(:new).with(responder) 
    Telephony.receive('Body', from: '666-555-4444', body: 'Testing') 
    end 
end 

私がこのテストを実行すると、このエラーメッセージが表示されます。

1) Telephony#receive creates an instance of DispatchMessenger when passed a responder's number 
Failure/Error: expect(DispatchMessenger).to receive(:new).with(responder) 
    (<DispatchMessenger (class)>).new(#<User id: 16757, email: "[email protected]", name: "Roy the Responder", phone: "6665554444", role: "responder", active: true, long: nil, lat: nil>) 
     expected: 1 time with arguments: (#<User id: 16757, email: "[email protected]", name: "Roy the Responder", phone: "6665554444", role: "responder", active: true, long: nil, lat: nil>) 
     received: 0 times with arguments: (#<User id: 16757, email: "[email protected]", name: "Roy the Responder", phone: "6665554444", role: "responder", active: true, long: nil, lat: nil>) 

私はこのテストは、単純に、この特定の電話番号が受信テレフォニー#に渡される場合DispatchMessengerのインスタンスが作成されていることを確認したいです。これは、特定の属性(電話番号)を比較する代わりに、オブジェクトを互いに比較していますか?もしそうなら、どうすればいいのですか?

答えて

1

あなたは正しく、オブジェクトは==ではないので、属性をhave_attributesマッチャーと比較する必要があります。

let(:responder) { have_attributes(phone: '666-555-4444', name: 'Roy the Responder') } 

アトリビュートが値なしの場合はrespond_toマッチャーを使用できます。

関連する問題