Edited at

rails newできたからとりあえずテスト自動化してみた(selenium/rspec/capybara)

More than 1 year has passed since last update.


はじめに

テストは大事。特にデグレテストとか、気づかないうちにバグってるから超大事。

でもテストは面倒。開発進んでいくと「こんくらいでいっかー」ってなってデグレる。

ので、テストを自動化する。rails newしたらとりあえず自動化環境を整える。


下準備

テスト対象となるアプリを作っておきます。

$ rails new sample_app

$ cd sample_app
$ rails g scaffold user name:string
$ rails db:migrate


テスト自動化に必要なgemをインストール


Gemfile

group :development, :test do

gem 'capybara', '~> 2.13'
gem 'selenium-webdriver'
gem 'rspec-rails', '~> 3.7' #追加 #rspec
gem 'chromedriver-helper' #追加 #seleniumで使うchromedriver
end

$ bundle install


RSpecの準備

$ rails g rspec:install

specフォルダと以下のファイルができる。


  • spec/spec_helper.rb #rspecの設定ファイル

  • spec/rails_helper.rb #rails版のrspecの設定ファイル


rails_helper.rbを設定してく


spec/rails_helper.rb

require 'spec_helper'

ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'rspec/rails'
require 'capybara/rspec' #追加
require 'capybara/rails' #追加

Capybara.default_driver = :selenium_chrome #追加 #headlessモードを使う場合は:selenium_chrome_headless

#追加ここから #chromedriverを登録
Capybara.register_driver :selenium_chrome do |app|
Capybara::Selenium::Driver.new(app, browser: :chrome)
end
#追加ここまで

#追加ここから #chromeのheadlessモードを登録(ブラウザ起動なし)
Capybara.register_driver :selenium_chrome_headless do |app|
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('headless')
options.add_argument('--disable-gpu')
Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end
#追加ここまで

〜中略〜

RSpec.configure do |config|
config.include Capybara::DSL #追加
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = true
config.infer_spec_type_from_file_location!
config.filter_rails_from_backtrace!
end


これで準備完了!


テストを書いてみる

ブラウザのテストはspec/features/に書くのがお決まりなのでディレクトリを作成してテストファイルを作ります。テストファイルのファイル名は「XXXXX_spec.rb」形式で。

$ mkdir spec/features/

$ touch spec/features/sample_spec.rb


spec/features/sample_spec.rb

require "rails_helper"

feature "Sample Test" do
scenario "New Userリンクを選択し、newページへ遷移できること" do
visit users_path
click_on "New User"
expect(current_path).to eq new_user_path
end
end



テスト実行!

$ rspec spec/features/sample_spec.rb

「New User」リンクをクリックしてユーザーの新規追加ページに遷移する簡単なテストが通りました。一瞬chromeも立ち上がってたし。


Reference