Я недавно переключил приложение с Rspec на Minitest, и оно того стоило. Тесты выполняются на намного быстрее, синтаксис поощряет более умный и тонкий код, и почему-то у меня теперь больше уверенности в наборе (меньше магии в работе).
Улучшение распространяется на интеграционное / приемочное тестирование. Я считаю, что Minitest с Capybara намного более читабелен и понятен, чем Cucumber (и гораздо менее хрупок).
Ниже приведен вспомогательный файл, который должен быть всем, что вам нужно для получения модульных, функциональных и интеграционных тестов, запущенных с Minitest с использованием синтаксиса спецификации . Это было основано на сути @tenderlove & много чтения / экспериментов. Примечания и предостережения ниже.
ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)
require 'rubygems'
gem 'minitest'
require 'minitest/autorun'
require 'action_controller/test_case'
require 'miniskirt'
require 'capybara/rails'
require 'mocha'
require 'turn'
# Support files
Dir["#{File.expand_path(File.dirname(__FILE__))}/support/*.rb"].each do |file|
require file
end
class MiniTest::Spec
include ActiveSupport::Testing::SetupAndTeardown
alias :method_name :__name__ if defined? :__name__
end
class ControllerSpec < MiniTest::Spec
include Rails.application.routes.url_helpers
include ActionController::TestCase::Behavior
before do
@routes = Rails.application.routes
end
end
# Test subjects ending with 'Controller' are treated as functional tests
# e.g. describe TestController do ...
MiniTest::Spec.register_spec_type( /Controller$/, ControllerSpec )
class AcceptanceSpec < MiniTest::Spec
include Rails.application.routes.url_helpers
include Capybara::DSL
before do
@routes = Rails.application.routes
end
end
# Test subjects ending with 'Integration' are treated as acceptance/integration tests
# e.g. describe 'Test system Integration' do ...
MiniTest::Spec.register_spec_type( /Integration$/, AcceptanceSpec )
Turn.config do |c|
# use one of output formats:
# :outline - turn's original case/test outline mode [default]
# :progress - indicates progress with progress bar
# :dotted - test/unit's traditional dot-progress mode
# :pretty - new pretty reporter
# :marshal - dump output as YAML (normal run mode only)
# :cue - interactive testing
c.format = :cue
# turn on invoke/execute tracing, enable full backtrace
c.trace = true
# use humanized test names (works only with :outline format)
c.natural = true
end
Примечания
- Предназначен для использования в Rails 3.1 или 3.2. Не пробовал ниже этого.
gem 'minitest'
необходим для получения более продвинутой функциональности Minitest (let
блоков и т. Д.)
- Здесь используются мокко (более полные насмешки / заглушки), мини-юбка (factory_girl lite) и бегун нового хода. Ни одна из этих зависимостей.
- Начиная с Rails 3.2, вложенные блоки
describe
в тестах контроллера выдают ошибку