2013-11-07 2 views
6

В RSpec я мог бы создать вспомогательные модули в /spec/support/...Включить модуль во всех MiniTest тестах, как в RSpec

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 ~> 4 (то, что вы получаете с стандартной библиотекой Рубина)

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 

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

16

С MiniTest 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 

Просто определить модуль в файл и использовании требует, чтобы вытащить его, например, если «UsefulStuff» определяются в тесте/поддержка/useful_stuff.rb, вы. может потребовать «support/useful_stuff» в вашем отдельном тестовом файле.

UPDATE:

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

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

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

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

require 'test_helper' 

Это совершенно аналогично RSpec, где у вас есть строка требуется «spec_helper» в верхней части каждого файла спецификации.

+0

Да, это тоже то, что я нашел, но я хочу включить его в общем .. во всех тестовых случаях ..? – Lichtamberg

+0

Вы можете использовать тот же метод. Определите test/test_helper.rb и требуйте все в каталоге тестирования/поддержки. Тогда просто требуйте тест _helper.rb во всех ваших индивидуальных тестовых файлах - точно так же, как RSpec –

+0

Да .. Но какой правильный класс включить? – Lichtamberg

0

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

# 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 

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

Смежные вопросы