Не могу заглушить мокко в тесте ruby ​​на рельсах - PullRequest
1 голос
/ 01 мая 2019

Я довольно новичок в 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 Ответ

2 голосов
/ 01 мая 2019

Добавление вызова к 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, что необходимо для правильной инициализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...