我目前在控制器中有一些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,"之后是否有延迟检查匹配器的问题。行,以便我可以测试这种情况。
答案 0 :(得分:0)
我想测试消息是否已使用正确的消息名称和序列化的更新对象发布...
这不适合控制器测试,因为发布发生在控制器操作的范围之外。如果您需要为它编写单元测试,那么最好将该测试放在模型中,或者放在单独的单元中(例如从lib
加载的PORO)。