最近、アプリケーションを Rspec から Minitest に切り替えましたが、それだけの価値がありました。テストははるかに高速に実行され、構文はよりスマートで無駄のないコードを促進し、どういうわけか今ではスイートに自信が持てるようになりました (仕事の魔法が減りました)。
改善は統合/受け入れテストにまで及びます。私は、Capybara を使用した Minitest が Cucumber よりもはるかに読みやすく、簡単である (そして脆弱性がはるかに少ない) ことを発見しました。
以下は、 spec 構文を使用して 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
ブロックがエラーをスローする