2017-02-02 26 views
2

我試圖在if條件滿足時創建以下方法的測試(創建DispatchMessenger的實例)。rspec測試檢查#new是否在類上調用

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匹配屬性。

相關問題