ruby-on-rails 如何模拟包含在控制器中的模块方法

iszxjhcz  于 2023-05-08  发布在  Ruby
关注(0)|答案(1)|浏览(169)

我正在使用recaptcha,我需要模拟verify_captcha方法。这个方法被recaptcha gem包含在控制器中:

ActiveSupport.on_load(:action_controller) do
  include Recaptcha::Adapters::ControllerMethods
end

如何模拟verify_captcha方法(即Recaptcha::Adapters::ControllerMethods中的方法)?
我正在使用:

allow_any_instance_of(ApplicationController).to receive(:verify_recaptcha).and_return(true)

但是rubocop说这不是最好的方法。

jum4pzuy

jum4pzuy1#

Rubocop不喜欢allow_any_instance_of,坦率地说,RSpec也不喜欢。
但是,清除ApplicationController可能有点棘手。
你应该可以使用spy

app_controller_spy = spy("ApplicationController")

expect(app_controller_spy).to receive(:verify_recaptcha).and_return(true)

更好的是,不要测试其他人的代码,只测试你自己的代码。gem有自己的代码覆盖率,您对它的信任足以将其放入项目中。
您需要测试的只是ActionController是否包含Recaptcha::Adapters::ControllerMethods,以确认您已经完成了工作。

相关问题