我是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
答案 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
,这是正确初始化所必需的。