2016-03-07 49 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)。