rspec 测试检查 #new 是否在类上调用

2024-01-02

当满足 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 实例。这是将对象相互比较,而我应该比较特定属性(即电话号码)吗?如果是这样,我该怎么做呢?


你是对的,物体不是==你应该将属性与有属性 https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers/have-attributes-matcher匹配器。

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

对于没有值的属性,您可以使用回应 https://www.relishapp.com/rspec/rspec-expectations/v/3-5/docs/built-in-matchers/respond-to-matcher匹配器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

rspec 测试检查 #new 是否在类上调用 的相关文章

随机推荐