はじめに
Everyday Rails - RSpecによるRailsテスト入門でRSpecの学習中、以下の記述の理解が難しかったので調べてみました。
before do
driven_by :rack_test
end
環境
ruby 3.2.1
Rails 7.0.4
rspec-rails 6.0.1
Capybara 3.38.0
selenium-driver 4.8.1
webdrivers 5.2.0
driven_by
これはシステムスペックの設定オプションで、使用するドライバーやブラウザを指定できるそうです。
例えばseleniumドライバーと、Chromeブラウザを使用したい場合は以下のようになります。
driven_by :selenium, using: :chrome
参考: Railsドキュメント
ドライバの種類
以下引用です。 参考: Capybaraチートシート
ドライバ | 使用するときのシンボル | 概要 |
---|---|---|
Rack::Test | :rack_test | デフォルト。 Rails標準のテスト機能。Rackと通話して通信をシミュレートする。 高速だがJavaScriptを使えない、Rackアプリ外の通信をテストできない。 |
Selenium | :selenium | js利用時のデフォルト。Selenium Web DriverによりFirefoxをヘッドレスブラウザとして起動し、その中でテストする。多機能だがFirefoxに依存する。 |
Webkit | :webkit | QtWebkitを使ったヘッドレスブラウザ環境。Webkit準拠、Seleniumより高速。 |
Poltergeist | :poltergeist | PhantomJSベースのヘッドレスブラウザ環境。ピュアヘッドレス(のため高速)、Webkit準拠。 |
RSpecでどれを使用すればいいのか?
基本的には:rack_test
だけでいいと感じました。
jsを使用してテストする際も、デフォルトのselenium
で事足ります。
簡単なアプリケーションなどであればjsをわざわざ使用しなくても一応テストはできますし、:selenium
を使用した感じ、テスト実行〜完了までが時間かかります。
なのでjsじゃなきゃダメなんだ、という時以外はデフォルトの:rack_test
でいいと思います。
使用方法
:rack_test
システムスペックファイル作成
$ rails g rspec:system test
デフォルトでrack_test
は設定されています
require 'rails_helper'
RSpec.describe "Tests", type: :system do
before do
driven_by(:rack_test)
end
pending "add some scenarios (or delete) #{__FILE__}"
end
:selenium
今回はChromeでの使用方法について説明します。
gemでドライバーをインストールする。
:selenium
使用時にChrmeを使用したい場合はwebdrivers
をインストールします。
(Rails6以降であればデフォルトで入っています)
gem "selenium-webdriver" #javascriptが実行可能なドライバー
gem "webdrivers" #chromeとやり取りするインターフェースになる
selenium
でChromeを使用するように設定する
# jsオプション有効時のドライバを設定(デフォルトは:selenium)
Capybara.javascript_driver = :selenium_chrome
各ブロック内でjs: true
を指定する
describe '...', js: true do
# javascriptが有効になる
end
context '...', js: true do
# javascriptが有効になる
end
it '...', js: true do
# javascriptが有効になる
end
selenium
でブラウザのシミュレーションをする際の難点
テストはブラウザが自動で立ち上がり、操作されながら実行されるのでテストが完了するまでに時間がかかります。
大掛かりなアプリでは相当な時間になります。
その場合は、ブラウザを立ち上げずに実行する方法もあります。
# jsオプション有効時のドライバを設定(デフォルトは:selenium)
Capybara.javascript_driver = :selenium_chrome_headless
参考サイト
Railsドキュメント
Everyday Rails - RSpecによるRailsテスト入門
Capybaraチートシート