Как настроить MiniTest? - программирование
Подтвердить что ты не робот

Как настроить 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, что мне не хватает?

Спасибо!

4b9b3361

Ответ 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' в верхней части каждого из моих тестовых файлов.