前回の記事でSelenium + Rubyでテストを始めてみるも 「これってブラウザの操作はできたけど、どのテストが通ったのかわからないんじゃね?」 と気づきました。その結果、タイトルの組み合わせでテストすることにしました。

2017/1/28 追記
この後にもいろいろやったんですけど、結局RSpecを使わずにMinitestに変更しました

前書き


CapybaraはSelenium(というかRubyのその他も含めたテスト関連の)ラッパーのようです。
RSpecはRubyのテストフレームワークです。

なお、どのテストが通ったかどうか判断するだけだとCapybaraはいらないですが、生でSelenium操作するよりCapybara使った方が楽です。初めてRubyでSeleniumやる人はCapybara使った方がいいと思います。というかTwitterで「今からやるなら使った方がいいですよ。」って教えて頂きました。ありがとうございます。

今回はインストールまで書きます。この後はたぶん別の記事で書きます。たぶん…たぶん…

なお、前回の記事までの構築は済んでいるとします。

Gemfile


ルートディレクトリにGemfileを作成します。
私はなぜかすべてのgemをhttps://rubygems.orgから取得できなかったので別のsourceも追加しています。

不要なgemが含まれてたらゴメンナサイ。

1
2
3
4
5
6
7
8
9
10
11
source 'https://rubygems.org'

source 'http://production.cf.rubygems.org' do
gem "capybara", "2.10.1"
gem "rspec", "3.5.0"
gem "selenium-webdriver", "3.0.1"
end

gem "rake_shared_context", "0.3.0"
gem "awesome_print", "1.7.0"
gem "pry", "0.10.4"

インストール


bundlerがインストールされていない場合は下記のコマンドでインストールします。

1
gem install bundler

そのあと、Gemfileに記述したgemをインストールします。

1
bundle install

.rspec


ルートディレクトリに.rspecファイルを作成します。
下記のように記述することでテスト結果を見やすくすることができます。

1
2
--format documentation
--color

spec_helperを作成する


まずspecディレクトリを作成します。そのあと、その中にspec_helper.rbファイルを作成します。
今回spec_helper.rbは下記のように記述しました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# coding: utf-8
require 'rubygems'
require 'awesome_print'
require 'capybara/rspec'
require 'selenium-webdriver'
Dir[File.join(Dir.pwd + "/spec/pages/**/*.rb")].sort.each {|f| require f}

Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, :browser => :chrome)
end

Capybara.default_wait_time = 10
Capybara.app_host = 'http://***.***.***.***'

RSpec.configure do |config|
config.include Capybara::DSL
end

6行目のDir[File...の記述についてです。私は現在PageObjectパターンというSelenium公式推奨と言われるパターンでテストコードを書いています。これは書くページを一つのオブジェクトとみなすパターンです。前述のように記述することでspec/pages/以下のRubyのクラスを最初にrequireするようにしています。ディレクトリは環境にあわせて変更する必要があります。

こうやって指定したディレクトリ内のrbファイルをrequireしないと各テストケースごとに必要なクラスをrequireしないといけなくなります。また、PageObejectパターンを使わなくても共通のテストケースを他のケースで使う場合にこれをやっとかないと「存在しないテストケースを指定している」とエラーが出ます。

PageObejectパターンについては下記2つの記事非常に参考になります。

Selenium2でつくるテストケースの構成について
一休.comのE2Eテスト事情 ~ギリギリ話せるところまで話します~ /cybozu_ikyu_e2e

とりあえずここまで


いっぱい書くとしんどいので とりあえず、今回はここまでにします。
あんまりガッツリRubyを触るつもりはなかったのですが、RSpecとPageObejectパターンでやることによってやらざるを得なくなってしまいました…覚えること多くてしんどい…(´;ω;`)

とりあえず、会社と並行してこのブログを自動テストしてみようと思ってます。