RSpec延迟期望参数匹配器

时间:2016-03-07 22:49:41

标签: ruby-on-rails ruby rspec

我目前在控制器中有一些rails代码,它们会执行以下操作:

def update
  @local.update(...)
  @local.save!
  Exchange::publish_to_exchange('event-title', Serializer.new(@local).serializable_hash)
  render ...
end

我想测试消息是否已使用正确的消息名称和序列化的更新对象发布。所以,在控制器规范中,我做了类似的事情:

let(:local) { create(:local_class) }

it 'publishes serialized version to exchange' do
  expect(Exchange).to receive(:publish_to_exchange).with('event-title', Serializer.new(local).serializable_hash)

  put :update, params
end

然而,这显然不起作用,因为它正在比较本地的未更新的,可序列化的散列与更新的版本。我想知道在" put:update,params,"之后是否有延迟检查匹配器的问题。行,以便我可以测试这种情况。

1 个答案:

答案 0 :(得分:0)

  

我想测试消息是否已使用正确的消息名称和序列化的更新对象发布...

这不适合控制器测试,因为发布发生在控制器操作的范围之外。如果您需要为它编写单元测试,那么最好将该测试放在模型中,或者放在单独的单元中(例如从lib加载的PORO)。