Как настроить MiniTest?
Я довольно новичок, но стараюсь улучшить TDD в Rails.
RSpec отлично работает, но мои тесты довольно медленные. Я слышал, что MiniTest намного быстрее, и MiniTest/Spec DSL выглядит довольно похоже на то, как я привык работать с RSpec, поэтому я решил попробовать.
Тем не менее, я не смог найти что-либо в Интернете, которое дает пошаговое руководство по настройке и запуску Minitest. Я узнал, как тестировать из книги RSpec, и я не знаю, как должны работать Test:: Unit или MiniTest. У меня есть драгоценный камень в моем gemfile, я написал несколько простых тестов, но я понятия не имею, где их разместить или как их запускать. Я считаю, что это одна из тех вещей, которые настолько очевидны, что никто не удосужился записать ее...
Может кто-нибудь объяснить мне, как настроить некоторые файлы Minitest/spec и запустить их, чтобы я мог сравнить производительность с Rspec?
ИЗМЕНИТЬ
В частности, это те основы, которые мне больше всего нужно знать:
- Вам нужен файл test_helper (например, spec_helper), и если да, то как его создать?
- Как вы запускаете minitest? Кажется, что не соответствует эквиваленту
rspec spec
или rspec path/to/file_spec.rb
, что мне не хватает?
Спасибо!
Ответы
Ответ 1
Этот вопрос похож на Как запустить все тесты с помощью 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
Ответ 2
Какую версию 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
.
Получение ваших тестов для запуска быстрее - это еще одно темное искусство. Посмотрите spork и watchr. Первое поддерживает ваше приложение, инициализирует, перезагружает измененные файлы и вилки перед каждым запуском вашего тестового набора. Последний отслеживает файлы в вашем репо для изменений и автоматически запускает связанные с ними тестовые примеры.
Вместе они дают вам довольно среднюю настройку TDD. Вы пишете тестовый пример для своей новой модели, и он автоматически запускается и терпит неудачу. Тогда всякий раз, когда вы сохраняете связанную модель, этот тест запускается очень быстро. Вы получаете мгновенную обратную связь о том, красный/зеленый цвет.
Они оба немного сложны, чтобы настроиться и вести себя хорошо вместе, поэтому зайдите еще на несколько вопросов, если вы застряли.
Удачи!
Ответ 3
Обратите внимание, что watchr или spork не являются требованиями для запуска тестов. Они удобны для проведения автотестирования. Но самый простой способ запустить набор тестов MiniTest - это сам рубин:
$ ruby myfileoftests.rb
Ответ 4
Посмотрите начало видео для minitest-rails. Он просматривает процесс настройки Minitest для Rails.
http://www.youtube.com/watch?v=xA2f2zBNvsc
В пошаговом руководстве показано, как создать вспомогательный файл, а также как запускать тесты с использованием команды rake. Если вы хотите запустить определенный тест, вы можете сделать это со следующим:
ruby -Itest test/models/user_test.rb
Ответ 5
Более новые версии RSpec (начиная с версии 2.8, выпущенной в январе 2012 года) имеют резкое увеличение скорости. Здесь - исследование различий в производительности и сравнение с MiniTest.
Кроме того, я нашел этот скринкаст от Райана Бейтса - отличное введение в MiniTest. Обратите внимание, что это одно из про-видео, и вам нужно подписаться, чтобы посмотреть его.
Ответ 6
Вот мой весь 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
в каталоге my/test. (Требуется установить миниатюрный репортер):
require 'minitest/reporters'
Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new)
require 'minitest/autorun'
Мне просто нужно было require_relative './minitest_helper'
в верхней части каждого из моих тестовых файлов.