NoMethodError:ModuleX:Module的未定义方法`stub'

时间:2014-03-27 15:18:11

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

使用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

是否可以存根方法2?

编辑:所以主要的解决方法是该方法是&#39; stubs&#39;不是&#39; stub&#39;。我虽然嘲笑这个dang模块仍然有困难。

编辑:Rails和MiniTest即使在我删除它之后也只是调用模块方法。 Rails是否有可能覆盖我的存根?

class Test < ActionDispatch::IntegrationTest

test "test do

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

此测试导致方法2内的错误bc没有传入任何参数。测试的行为就像方法没有被存根一样。

2 个答案:

答案 0 :(得分:2)

使用s尝试.stubs

stub符号用于构建稍后使用的存根。 直接在某个方法上存储方法时添加一个。

答案 1 :(得分:1)

关于您的测试,您可能需要

Module1.expects(:method2)

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

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