【问题标题】:NoMethodError: undefined method `stub' for ModuleX:ModuleNoMethodError:ModuleX:Module 的未定义方法“存根”
【发布时间】:2014-03-27 15:18:11
【问题描述】:

使用 Mocha,我试图模拟一个调用模块方法的控制器方法。 这是一个集成测试。

例子:

class Controller < ApplicationController
  def method1
    response = Module1.method2(... 

到目前为止我的步骤:

  • 将 mocha 添加到 gemfile 中
  • 在我的最底部添加了require 'mocha/mini_test' test_helper.rb
  • 在向我的控制器发送帖子之前,在我的集成测试中尝试了此代码:

    Module1.stub(:method2).returns(:true) post "controller/method1"

  • 得到了这个错误:

    NoMethodError: undefined method 'stub' for Module1:Module

是否可以存根method2?

编辑:所以主要的解决方法是该方法是“存根”而不是“存根”。不过,我仍然无法模拟这个该死的模块。

编辑:Rails 和 MiniTest 只是在我将其存根之后才调用模块方法。 Rails 是否有可能覆盖我的存根?

class Test < ActionDispatch::IntegrationTest

test "test do

Module1.stubs(:method2).returns(:true)
post "controller/method1"

此测试导致 method2 内部出错,因为没有传入参数。测试表现得好像该方法没有被存根。

【问题讨论】:

    标签: ruby-on-rails mocking integration-testing mocha.js


    【解决方案1】:

    尝试.stubs 与 s。

    stubnotation 用于构建您稍后将使用的存根。 当您直接在某事物上存根方法时添加 s。

    【讨论】:

    • 所以,你的建议解决了我的第一个问题;但是,我仍然无法模拟这种方法。 Rails 和 MiniTest 只是去调用模块方法,即使我已经存根了它。 Rails 是否有可能覆盖我的存根?
    【解决方案2】:

    关于你的测试,你可能想要一个

    Module1.expects(:method2)
    

    但存根应该可以正常工作。 Rails 不会覆盖你的存根,也许你 test_helper 会覆盖,但我很确定它更像是一种语法。

    粘贴您的真实代码并进行测试,因为这里知道这有点困难并且可以是任何东西......一个回调阻止要调用的方法,测试语法......

    【讨论】:

      【解决方案3】:

      对我来说,这是由于没有将require 'minitest/mock' 添加到我的test_helper.rb 造成的

      【讨论】:

        猜你喜欢
        • 2011-01-03
        • 1970-01-01
        • 2017-11-10
        • 1970-01-01
        • 2011-01-23
        • 2017-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多