我想我没有以正确的方式测试它,但我仍然想知道如何确保在after_action中触发方法调用。
具体如下:
class AbcdController < ApplicationController
after_action :handle_after, only: [:receive]
def receive
…… do some stuff
end
private
def handle_after
MyModule.my_method(some_data)
end
end
然后我想像这样测试它(在请求规范中):
post '/abcd/receive.json', params: params
expect(MyModule).to receive(:my_method)
此测试未通过。如果达到url,确保调用MyModule.method
的其他方法是什么?
答案 0 :(得分:0)
基本上就是这样做的。
也许,当您需要更多集成方法时,而不是检查MyModule
收到:my_method
是否测试调用此模块的效果。
例如,如果它正在DB中记录事件,请检查
expect {post '/abcd/receive.json'}.to change{ Event.count }.by(1)
您需要在测试停止时定义边框,因此您必须平衡模拟量并深入检查应用的行为。
答案 1 :(得分:0)
尝试have_received
:
post '/abcd/receive.json', params: params
expect(MyModule).to have_received(:my_method)