使用rspec测试使用should_receive的方法

时间:2014-02-01 23:13:02

标签: ruby-on-rails ruby ruby-on-rails-3 rspec rspec-rails

我有一个地址方法,它实例化一个新类并返回一些信息。

class Office  
  attribute :id
  def address
    info = Services::Employee.new
    info.contact = [contact]
    info.id = id

    info
  end
end

现在在上面的地址方法中,contact(一个数组内部)是另一个返回一堆东西的方法。

现在在我的rspec测试中我只想说info.contact返回[contact]而不用数据实际测试它。 我读到了关于should_receive但我不确定如何使用should_receive测试上述方法。

以下是我的尝试:

info = Employee.deserialize(JSON.parse(info.to_json))
it 'returns info' do
  Employee.should_receive(:info.contact).and_return('[contact]')
  expect(helper.address).to eq(info)
end

我收到了这个错误:

   expected: 1 time with any arguments
   received: 0 times with any arguments

2 个答案:

答案 0 :(得分:0)

看来info是测试中Employee的一个实例。因此,Employee收到消息contact

尝试更改测试,以便should_receive直接放在Employee上:

Employee.any_instance.should_receive(:contact).and_return('[contact]')

答案 1 :(得分:0)

Services::Employee,.any_instance.should_receive(:contact=) {|value|
  value.should eq <expected_value>
  <expected_value>
}