无法在Rails测试中使用红宝石中的摩卡咖啡存根

时间:2019-05-01 17:40:05

标签: ruby-on-rails ruby mocha

我是Ruby / Ruby on Rails的新手,在通过现有代码库中的mocha提出方法时遇到了麻烦。

我已将代码简化为MWE,在此不起作用。

这里是test_helper.rb

ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)

require "rails/test_help"


class ActiveSupport::TestCase

end


class Minitest::Test
  def before_setup

  end
end

这是测试:

require 'test_helper'
require 'mocha/minitest'

class MyTest < ActionMailer::TestCase

  describe "some test" do
    it "should stub" do
      My::Class.stubs(:bar).returns("foo")
      puts My::Class.bar
    end
  end

end

运行测试时,这会导致以下错误:

Mocha::NotInitializedError: Mocha methods cannot be used outside the context of a test

但是,当我按照以下方式重新定义test_helper.rb时:

ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)

require "rails/test_help"


class ActiveSupport::TestCase

end


# class Minitest::Test
#   def before_setup
#
#   end
# end

测试通过(并且按预期方式打印“ foo”)。

class Minitest::Test...end中的test_helper.rb为什么引起第一个错误?我无法从实际的代码库中删除该代码,那么如何修改它以使其与mocha一起使用?

Ruby版本:2.4.1

Rails版本:4.2.8

摩卡版本:1.5.0

1 个答案:

答案 0 :(得分:2)

super的修补方法before_setup中向test_helper.rb添加呼叫有效

ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)

require "rails/test_help"


class ActiveSupport::TestCase

end


class Minitest::Test
  def before_setup
      # do something
      super
  end
end

此对super的调用允许调用before_setup中的Mocha::Integration::MiniTest,这是正确初始化所必需的。