IntegrationTest与Mocha,stub HelperMethod(Ruby)

时间:2018-03-05 18:22:16

标签: ruby-on-rails ruby mocha integration-testing

我有一个辅助方法:

  

has_permission?

在一个名为:

的模块中
  

模块ApplicationHelper

内部app / helpers。

我还有一个包含它的IntegrationTest:

include ApplicationHelper

我的集成测试通过get请求调用我的一个控制器。

随叫随到,我想测试我的集成测试是否达到某种方法。

通过这种方式必须传递一些方法,其中一个是

  

has_permission?

为了确保此方法通过,我想将其存根。

  

Object.any_instance.expects(?:has_permission)返回(假)。   不起作用

     

ApplicationHelper.expects(?:has_permission)返回(假)。   不起作用,因为它不是静态方法。

有没有办法可以在测试中存根帮助器非静态方法,所以我可以在所有情况下都返回false?

测试:

test "test try to edit without permission" do
@curr = users(:me)
sign_in @curr

SellingController.expects(:validate).never

post enable_update_user_selling_path(id: @user, params: {user: {sell: "1"}})

2 个答案:

答案 0 :(得分:2)

在Rails 5中尝试找出如何在ApplicationHelper中存入ActionDispatch::IntegrationTest方法时偶然发现了这一点;不知道这是否正是您要实现的目标,但是我最终做了这样的事情

MyController.view_context_class.any_instance.expects(:my_method).returns(true)

自Rails 5以来,辅助方法似乎并没有简单地直接混入控制器类中,因此view_context_class位似乎也是如此。

似乎可以正常工作,希望这会对某人有所帮助!

答案 1 :(得分:0)

忘记发布我最终解决这个问题的方式:

SellingController.any_instance.stubs(:has_permission?).returns(false)