rspec/测试after_action
rspec / testing after_action
我想我没有以正确的方式测试它,但我仍然想知道如何确保在 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
的另一种方法是什么?
基本上就是这样。
也许,当你想要更多的集成方法时,而不是检查 MyModule
是否收到 :my_method
测试调用此模块的效果。
例如,如果它正在记录数据库中的事件,请检查
expect {post '/abcd/receive.json'}.to change{ Event.count }.by(1)
您需要在测试停止时定义边界,因此您必须在模拟量与深入检查应用程序行为之间取得平衡。
尝试 have_received
:
post '/abcd/receive.json', params: params
expect(MyModule).to have_received(:my_method)
我想我没有以正确的方式测试它,但我仍然想知道如何确保在 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
的另一种方法是什么?
基本上就是这样。
也许,当你想要更多的集成方法时,而不是检查 MyModule
是否收到 :my_method
测试调用此模块的效果。
例如,如果它正在记录数据库中的事件,请检查
expect {post '/abcd/receive.json'}.to change{ Event.count }.by(1)
您需要在测试停止时定义边界,因此您必须在模拟量与深入检查应用程序行为之间取得平衡。
尝试 have_received
:
post '/abcd/receive.json', params: params
expect(MyModule).to have_received(:my_method)