当满足 if 条件(创建 DispatchMessenger 的实例)时,我尝试为以下方法编写测试。
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] /cdn-cgi/l/email-protection", 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] /cdn-cgi/l/email-protection", 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] /cdn-cgi/l/email-protection", name: "Roy the Responder", phone: "6665554444", role: "responder", active: true, long: nil, lat: nil>)
我希望此测试只是确认如果将此特定电话号码传递给 Telephony#receive,则创建了 DispatchMessenger 实例。这是将对象相互比较,而我应该比较特定属性(即电话号码)吗?如果是这样,我该怎么做呢?