Как настроить MiniTest?

Я довольно начинающий тестер, но пытаюсь улучшить TDD в Rails.

RSpec отлично работает, но мои тесты довольно медленные. Я слышал, что MiniTest намного быстрее, и MiniTest/Spec DSL выглядит довольно похоже на то, как я привык работать с RSpec, поэтому я подумал, что попробую.

однако я не смог найти ничего в интернете, который предоставляет пошаговое руководство по настройке и запуску Minitest. Я узнал, как тестировать ИЗ КНИГИ RSpec, и я понятия не имею, как должны работать Test::Unit или MiniTest. У меня есть камень в моем gemfile, я написал несколько простых тестов, но я понятия не имею, куда их положить или как их запустить. Я думаю, это одна из тех вещей, которые настолько очевидны, что никто не удосужился записать...

может ли кто-нибудь объяснить мне, как настроить некоторые файлы Minitest/spec и запустить их, чтобы я мог сравнить производительность с Для RSpec?

редактировать

конкретно эти основы мне нужно знать:

  1. вам нужен файл test_helper (например, spec_helper), и если да, то как его создать?
  2. как вы запускаете minitest? кажется, нет эквивалента rspec spec или rspec path/to/file_spec.rb что я упустил?

спасибо!

7 ответов


этот вопрос похож на как запустить все тесты с minitest?

используя Ruby 1.9.3 и Rake 0.9.2.2, учитывая такой макет каталога:

Rakefile
lib/alpha.rb
spec/alpha_spec.rb

вот что alpha_spec.rb может выглядеть так:

require 'minitest/spec'
require 'minitest/autorun'  # arranges for minitest to run (in an exit handler, so it runs last)

require 'alpha'

describe 'Alpha' do
  it 'greets you by name' do
    Alpha.new.greet('Alice').must_equal('hello, Alice')
  end
end

и вот Rakefile

require 'rake'
require 'rake/testtask'

Rake::TestTask.new do |t|
  t.pattern = 'spec/**/*_spec.rb'
end

вы можете запустить

  • все тесты: rake test
  • тест: ruby -Ilib spec/alpha_spec.rb

я не знаю, если вы используете spec_helper.rb С minitest является общим или нет. По-видимому, не существует удобного способа загрузки. Добавьте это в Rakefile:

require 'rake'
require 'rake/testtask'

Rake::TestTask.new do |t|
  t.pattern = 'spec/**/*_spec.rb'
  t.libs.push 'spec'
end

затем spec/spec_helper.rb может содержать различные избыточные вещи:

require 'minitest/spec'
require 'minitest/autorun'
require 'alpha'

и spec/alpha_spec.rb заменяет резервные части на:

require 'spec_helper'
  • все тесты: rake test
  • тест: ruby -Ilib -Ispec spec/alpha_spec.rb

какую версию Ruby вы используете?

в моем понимании, 1.9 введен MiniTest, который заменяет Test::Unit полностью, с обратно совместимым API. Так что, если вы на 1.9 и ваши ссылки на приложение Rails Test::Unit, на самом деле он уже использует MiniTest.

взгляните на свой источник Ruby -test/unit.rb для 1.9.2 требуется следующее:

require 'minitest/unit'
require 'test/unit/assertions'
require 'test/unit/testcase'

и test/unit/assertions включает в себя MiniTest::Assertions.


получение ваших тестов для запуска быстрее еще одно темное искусство. Взгляните на ловилка и watchr. Первый сохраняет ваше приложение инициализированным, перезагружает измененные файлы и вилки перед каждым запуском вашего набора тестов. Последний наблюдает за файлами в вашем РЕПО для изменений и автоматически запускает связанные с ними тестовые случаи.

вместе они дают вам довольно среднюю настройку TDD. Вы пишете тестовый случай для своей новой модели, и он автоматически запускается и терпит неудачу. Затем при сохранении связанной модели, что testcase повторяется, очень быстро. Вы получаете мгновенную обратную связь о том, являетесь ли вы красным / зеленым.

они оба немного сложно настроить и вести себя хорошо вместе, так что проверьте еще несколько вопросов, если вы застряли.

удачи!


обратите внимание, что watchr или spork не являются требованиями для запуска тестов. Они удобны для проведения автотестирования. Но самый простой способ, которым вы можете запустить набор MiniTest тестов, - это сам ruby:

$ ruby myfileoftests.rb

зацените начало работы видео на minitest-рельсы. Он проходит через процесс настройки Minitest для приложения Rails.

http://www.youtube.com/watch?v=xA2f2zBNvsc

в пошаговом руководстве показано, как создать вспомогательный файл, а также как запустить тесты с помощью задачи rake. Если вы хотите запустить определенный тест, вы можете сделать это следующим образом:

ruby -Itest test/models/user_test.rb

новые версии RSpec (начиная с версии 2.8, выпущенной в январе 2012 года) имеют резкое увеличение скорости. здесь - это исследование различий в производительности и сравнение с MiniTest.

и этой screencast Райан Бейтс отличное введение в MiniTest. Обратите внимание, что это один из про видео, и вам нужно будет подписаться, чтобы посмотреть его.


вот мой весь rakefile, который я поместил в свой верхний каталог:

task :default => :test
task :test do
  Dir.glob('./test/*_test.rb').each { |file| require file}
end

чтобы запустить все мои файлы Minitest сразу, я просто набираю rake. Вот так!

обязательно require 'minitest/autorun' в верхней части каждого из ваших Minitest файлов. Dir.glob определенно работает с Minitest.

чтобы получить красивый, цветной Minitest выход, с именами всех моих методов тестирования, у меня есть файл minitest_helper.rb в моем каталоге /тест. (Пришлось установить драгоценный камень minitest-репортеры):

require 'minitest/reporters'
Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new)
require 'minitest/autorun'

Я просто должен был require_relative './minitest_helper' в верхней части каждого из тестовых файлов.


Патрик написал действительно хорошее объяснение и пример. Для будущих читателей просто имейте в виду, что глобальные ожидания теперь обесцениваются и будут удалены в Minitest 6. Это требует почти тривиального изменения в упаковке вещи, которую вы тестируете в вызове expect.

require 'minitest/spec'
require 'minitest/autorun'  # arranges for minitest to run (in an exit handler, so it runs last)

require 'alpha'

describe 'Alpha' do
  it 'greets you by name' do
    expect(Alpha.new.greet('Alice')).must_equal('hello, Alice')
  end
end