【问题标题】:IntegrationTest with Mocha, stub HelperMethod (Ruby)与 Mocha 的集成测试,存根 HelperMethod (Ruby)
【发布时间】:2018-03-05 18:22:16
【问题描述】:

我有一个辅助方法:

has_permission?

在一个名为的模块中:

模块应用程序助手

在应用程序/助手内部。

我还有一个包含它的 IntegrationTest:

include ApplicationHelper

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

On call 我想测试我的集成测试是否到达某个方法。

在这种方式上必须通过一些方法,其中之一是

has_permission?

为了确保这个方法通过我想存根它。

Object.any_instance.expects(:has_permission?).returns(false) 没用

ApplicationHelper.expects(:has_permission?).returns(false) 也不起作用,因为它不是静态方法。

有没有办法可以在测试中存根帮助程序非静态方法,以便在所有情况下都返回 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"}})

结束

【问题讨论】:

  • 你能展示你的测试用例吗?可能值得尝试在控制器实例上存根(@controller,如果可用)
  • 我添加了测试,但不幸的是我没有@controller 实例。

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


【解决方案1】:

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

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

看起来好像从 Rails 5 开始,辅助方法并没有简单地直接混合到控制器类中,因此 view_context_class 位。

似乎有效,希望这对某人有帮助!

【讨论】:

  • 感谢您的回复,我忘记发布我刚才找到的解决方案了。
【解决方案2】:

忘记发布我是如何解决这个问题的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多