Включить модуль во все MiniTest тесты, как в RSpec

в RSpec я мог бы создать вспомогательные модули в /spec/support/...

module MyHelpers
  def help1
    puts "hi"
  end
end

и включите его в каждую спецификацию следующим образом:

RSpec.configure do |config|
  config.include(MyHelpers)
end

и использовать его в моих тестах вроде этого:

describe User do
  it "does something" do
    help1
  end
end

как я могу включить модуль во все MiniTest тесты, не повторяясь в каждом тесте?

3 ответов


minitest не обеспечить способ include или extend модуль в каждый тестовый класс таким же образом, как и RSpec.

лучше всего будет повторно открыть класс тестового случая (отличается, в зависимости от минимальной версии, которую вы используете) и include все модули, которые вы хотите там. Вы, вероятно, хотите сделать это в любом из ваших test_helper или в выделенном файле, который позволяет всем остальным знать, что вы исправляете minitest. Вот некоторые примеры:

для minitest ~> 4 (что вы получаете с стандартной библиотекой Ruby)

module MiniTest
  class Unit
    class TestCase
      include MyHelpers
    end
  end
end

для minitest 5+

module Minitest
  class Test
    include MyHelperz
  end
end

затем вы можете использовать включенные методы в своем тесте:

class MyTest < Minitest::Test # or MiniTest::Unit::TestCase
  def test_something
    help1
    # ...snip...
  end
end

надеюсь, что это ответ на ваш вопрос!


из самого маленького README:

=== How to share code across test classes?

Use a module. That's exactly what they're for:

module UsefulStuff
  def useful_method
    # ...
  end
end

describe Blah do
  include UsefulStuff

  def test_whatever
    # useful_method available here
  end
end

просто определите модуль в файле и используйте require, чтобы вытащить его. Например, если 'UsefulStuff' определен в test/support / useful_stuff.rb, вам может потребоваться "support / useful_stuff" в любом вашем отдельном тестовом файле.

обновление:

чтобы уточнить, в существующем тесте / test_helper.файл rb или в новом тесте / test_helper.файл rb, который вы создаете, включает следующее:

Dir[Rails.root.join("test/support/**/*.rb")].each { |f| require f }

что потребует все файлы в подкаталоге test / support.

затем в каждом из ваших отдельных тестовых файлов просто добавьте

require 'test_helper'

Это точно аналогично RSpec, где у вас есть строка require 'spec_helper' в верхней части каждого файла спецификации.


одна вещь, которую я сделаю, это создать свой собственный Test класс, наследующий от Minitest::Test. Это позволяет мне делать любую конфигурацию в моем базовом тестовом классе и изолировать его от моего собственного проекта1.

# test_helper.rb
include 'helpers/my_useful_module'
module MyGem
  class Test < Minitest::Test
    include MyUsefulModule
  end
end

# my_test.rb
include 'test_helper'
module MyGem
  MyTest < Test
  end
end

1 это, скорее всего, не нужно, но мне нравится держать весь мой код драгоценного камня изолированным.