RSpec + Capybaraを使って外部サイトのE2Eテストを行うテンプレートを作った
TL;DR
- poltergeist を使って PhantomJS が扱える
- それによって、外部サイトのテストや JavaScript のテストができる
- テストの雛形を作りました -> https://github.com/tsmsogn/e2e-testing-with-rspec-and-capybara
やったこと
bundle
や rspec
コマンドの使い方をいつも忘れるのでメモしておきます。
bundle使ってgem管理
$ mkdir foo && cd foo $ bundle init $ cat Gemfile # A sample Gemfile source "https://rubygems.org" # gem "rails" group :development, :test do gem 'rspec' gem 'capybara' gem 'capybara-webkit' gem "poltergeist" end $ bundle install
テストすることが目的のプロジェクトなのに、development
と test
の時だけ RSpec などの gem をインストールするのは変な気がしますが、とりあえずこのままで。
テスト作成
$ rspec --init $ cat spec/test_spec.rb require 'spec_helper' require 'capybara/rspec' require 'capybara/poltergeist' Capybara.javascript_driver = :poltergeist Capybara.register_driver :poltergeist do |app| Capybara::Poltergeist::Driver.new(app, js_errors: true, timeout: 30) end Capybara.configure do |config| config.run_server = false config.default_driver = :poltergeist config.app_host = 'http://tsmsogn.github.io' end describe '/', type: :feature do subject { page } before { visit('/') } it 'Title' do expect(page).to have_title 'u.find.any?' end end $ bundle exec rspec . Finished in 5.31 seconds (files took 1.9 seconds to load) 1 example, 0 failures
いいみたいです。
rakeでテストが走るように
Travis CI ではデフォルトで rake
が実行されるので、その際にテストが走るように Rakefile を書きます。
$ cat Rakefile require 'rspec/core/rake_task' RSpec::Core::RakeTask.new(:spec) task :default => :spec $ rake . Finished in 4.6 seconds (files took 1.27 seconds to load) 1 example, 0 failures
おkみたいです。
Todo
- Ruby >= 2.0.0, < 2.2.2 対応