2016-03-07 46 views
0

目前,我有一些Rails代码的控制器,做这样的事情:RSpec的延迟期望参数的匹配

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

我想测试该消息已出版了正确的消息名称和序列化,更新的对象......

这是不是真的适合控制器测试,因为出版时超出控制器行为的范围。如果你需要为它编写一个单元测试,你最好将该测试放在模型中,或者放在一个单独的单元中(例如从lib加载的PORO)。