ハマったのでメモ。素の minitest と capybara でテストを書く方法もありますが、とりあえず試してみるなら minitest-rails と minitest-rails-capybara を使うのが一番早いです。
Gemfile
に下記のように書いて bundle install
group :development, :test do
gem "minitest-rails"
end
group :test do
gem "minitest-rails-capybara"
end
下記コマンドで test/minitest_helper.rb
を生成します。
rails generate mini_test:install
さらに、test/minitest_helper.rb
の require "minitest/rails/capybara"
の行をコメントアウトします。その後下記のようなコマンドで integration test の雛形を生成します。
rails generate integration_test CanAccessTop --spec
--spec
は rspec 風の雛形を生成するためのオプションです。生成されるファイルはなぜか test/integration
ディレクトリではなく、test/acceptance
ディレクトリ配下に作られます。個人的には少し気に入らない挙動です(最終的に僕は素の minitest と capybara でいくことにしました)。
生成されたファイルから、capybara のDSLを使って簡単なテストを書いてみます。トップページ自体はできてる前提です。
require "minitest_helper"
describe "トップページにアクセスしたとき Acceptance Test" do
before { visit '/' }
it 'トップページと表示されていること' do
page.text.must_include 'トップページ'
end
end
ここで注意するのは、describe
メソッドに渡す文字列の末尾を ‘Acceptance Test’ にすることです(‘Integration Test’ でも可。incase sensitive)。minitest-rails は describe
に渡される文字列を正規表現パースして integration test か否かを判別しているようです。’Acceptance Test’が末尾に存在しないと、Capybara::DSL が include されずエラーになります。
最終的に、下記のコマンドでテストを実行してみます。
ruby -Itest test/acceptance/can_access_top_test.rb
Run options: --seed 50774
# Running tests:
.
Finished tests in 0.356557s, 2.8046 tests/s, 5.6092 assertions/s.
1 tests, 2 assertions, 0 failures, 0 errors, 0 skips
無事テストが通りました。やったね。