我最近将一个应用程序从 Rspec 切换到 Minitest,这是非常值得的。测试运行得更快,语法鼓励更智能、更精简的代码,不知何故,我现在对套件更有信心(工作中的魔法减少了)。
改进延伸到集成/验收测试,我发现 Minitest with 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'
let
获得一些更高级的 Minitest 功能(块等)是必要的
- 这使用了 mocha (fuller mocks/stubs)、miniskirt (factory_girl lite) 和新的 turn runner。这些都不是依赖项。
- 从 Rails 3.2 开始,
describe
控制器测试中的嵌套块会引发错误