rspec /测试after_action

时间:2018-02-24 15:12:54

标签: ruby-on-rails rspec ruby-on-rails-5 rspec-rails

我想我没有以正确的方式测试它,但我仍然想知道如何确保在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的其他方法是什么?

2 个答案:

答案 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)