我有一个辅助方法:
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"}})
端
答案 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)