Включить модуль во все 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 это, скорее всего, не нужно, но мне нравится держать весь мой код драгоценного камня изолированным.