プライベートで開発に関わっている Rails アプリが完成に近づいてきたので、 Capybara と RSpec を使ってインテグレーションテストを書くことにした。
JavaScript で動きをつけたページもきちんとテストしたいので、 JavaScript ドライバに Poltergeist を選択。
以下、作業メモ。
Chef で Phantomjs をインストール
まずは、Poltergeist が依存している、ヘッドレスブラウザの Phantomjs のインストールが必要。
Phantomjs はコミュニティ Cookbook を使ってインストールする。
Berkfile に
cookbook "phantomjs"
の1行を追加し、
berks vendor cookbooks
でインストール。既に cookbooks フォルダが存在する場合は、先に削除しておくこと。
開発環境は Vagrant で構築しているので、Vagrantfile に
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| # ... config.vm.provision "chef_solo" do |chef| chef.cookbooks_path = ["./chef/cookbooks", "./chef/site-cookbooks"] # ... # Phantomjs のレシピを追加 chef.add_recipe "phantomjs::default" end end
を記述して
vagrant provision
を実行。
Capybara と Poltergeist をインストール
ここからは vagrant ssh で仮想マシンに入って作業する。
Rails プロジェクトの Gemfile に
group :test do # 下記を追加 gem "capybara" gem "database_cleaner" gem "poltergeist" end
を記述。投入したテストデータがちゃんと削除されるように、database_cleaner もあわせて使う。
bundle install
を実行してインストール。
Capybara と Poltergeist と DatabaseCleaner を有効にする
spec_helper.rb に、Capybara と Poltergeist と DatabaseCleaner の設定を記述。
# ... # Capybara の設定 require 'capybara/rspec' require 'capybara/rails' require 'capybara/poltergeist' Capybara.javascript_driver = :poltergeist RSpec.configure do |config| # ... # database_cleaner の設定 config.before(:suite) do DatabaseCleaner.strategy = :transaction DatabaseCleaner.clean_with(:truncation) end config.around(:each) do |example| DatabaseCleaner.cleaning do example.run end end end
これで準備完了
あとは spec/features フォルダ下にフィーチャーを書いて、
bin/rake spec:features
でテストを走らせればいい。
下記のように、js: true
オプションを指定した箇所は Poltergeist を使って実行されるようになる。
describe "JavaScript を使ったページのテスト", js: true do it "JavaScript が実行されたかのテスト" do # テスト内容を書く end end