Before / After Suite при использовании Ruby MiniTest

есть ли альтернатива для RSpec-это before(:suite) и after(:suite) в MiniTest?

Я подозреваю, что пользовательский тестовый бегун в порядке, однако я не могу себе представить, что это не общее требование, поэтому кто-то, вероятно, реализовал. :-)

8 ответов


здесь setup() и teardown() методы. В документации также перечислены before() и after() как доступные.

Edit: вы хотите запустить что-то перед каждым тестом или до или после завершения всего набора?


как отмечалось выше в ответе и комментариях Кейли,MiniTest::Unit содержит функцию after_tests. Нет before_tests или эквивалент, но любой код minitest_helper.rb файл должен быть запущен перед набором тестов, так что будет делать офис такой функции.

предостережение: все еще относительно новый в Ruby, и очень новый в Minitest, так что если я ошибаюсь,пожалуйста поправьте меня! :-)


чтобы заставить это работать с текущей версией Minitest (5.0.6), вам нужно require 'minitest' и использовать Minitest.after_run { ... }.

warn "MiniTest::Unit.after_tests is now Minitest.after_run. ..."

https://github.com/seattlerb/minitest/blob/master/lib/minitest.rb https://github.com/seattlerb/minitest/blob/master/lib/minitest/unit.rb


для запуска кода перед каждого


один простой способ сделать это-написать метод защищенного класса, а затем вызвать это в begin.

Minitest:: Spec пример:

describe "my stuff" do
  def self.run_setup_code
    if @before_flag.nil?
      puts "Running the setup code"
      @before_flag = true
    end
  end

  before do
    self.class.run_setup_code
  end

  it "will only run the setup code once" do
    assert_equal 1, 1
  end

  it "really only ran it once" do
    assert_equal 1,1
  end
end

...чтобы получить

Run options: --seed 11380

# Running:

Running the setup code
..

Finished in 0.001334s, 1499.2504 runs/s, 1499.2504 assertions/s.

2 runs, 2 assertions, 0 failures, 0 errors, 0 skips

хорошая вещь о minitest-это его гибкость. Я использую пользовательский Minitest Runner с+ before_suite + обратный вызов. Что - то вроде в этом примере -Ruby Minitest: настройка уровня класса или класса?

а затем скажите minitest использовать пользовательский runner

MiniTest::Unit.runner = MiniTestSuite::Unit.new

вы также можете добавить обратный вызов после теста, обновив test_helper.rb (или spec_helper.rb) вот так

# test_helper.rb

class MyTest < Minitest::Unit
  after_tests do
    # ... after test code
  end
end

вы можете просто поместить код вне класса.

Это то, что я делаю, чтобы иметь баннер.

require 'selenium-webdriver'
require 'minitest/test'
require 'minitest/autorun'

class InstanceTest < Minitest::Test

    def setup
    url     = ARGV.first
    @url    = self.validate_instance(url)
        @driver = Selenium::WebDriver.for :firefox
    end