LoginSignup
1
2

More than 5 years have passed since last update.

RspecにSystem Specを導入

Last updated at Posted at 2018-12-13

Dockerで実行するfeature test(画面テスト)にSystem Specを使ってみた。
javascriptのテストをやりたくて。
既にRspecは導入済みの前提。
System Specについては下記が詳しい。
- rspec-rails 3.7の新機能!System Specを使ってみた - Qiita

Dockerfile

chromedriver-helperをgemでインストールしてもエラーが出て使えないよう。
Dockerfileで、webコンテナにchromedriverとheadlessのChromeをインストールする。

FROM ruby:2.5.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev unzip && \
  CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \
  wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ && \
  unzip ~/chromedriver_linux64.zip -d ~/ && \
  rm ~/chromedriver_linux64.zip && \
  chown root:root ~/chromedriver && \
  chmod 755 ~/chromedriver && \
  mv ~/chromedriver /usr/bin/chromedriver && \
  sh -c 'wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' && \
  sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \
  apt-get update && apt-get install -y google-chrome-stable
...

rails_helper

Capybara.register_driverCapybara.javascript_driverの記述は不要。

# rails_helper.rb
...
require 'capybara'
...

RSpec.configure do |config|
  ...

  config.include Devise::Test::IntegrationHelpers, type: :system

  config.include Warden::Test::Helpers
  config.after :each do
    Warden.test_reset!
  end

  config.before(:each) do |example|
    if example.metadata[:type] == :system
      driven_by :selenium, using: :headless_chrome, screen_size: [1280, 800], options: { args: ["headless", "disable-gpu", "no-sandbox", { "lang" => 'ja-JP' }] }
    end
  end
end

login_asメソッドでエラー

login_as(@user, scope: :user)uncaught throw :warden エラーが出る。
ScreenShotをよく見ると、recordがactiveじゃないよう?
作成したUserモデルがconfirmableの場合、confirmed_atに日付を入れてactiveにする必要がある。

failures_r_spec_UncaughtThrowWarden.png

参考
- 「Selenium::WebDriver::Error::WebDriverError: unable to connect to chromedriver 127.0.0.1:9515」または「Selenium::WebDriver::Error::UnknownError: unknown error: cannot find Chrome binary」のエラーに対応する - Qiita
- Headless ChromeをDocker上で動かして、E2Eのテスト - Qiita
- Docker上でSystem Specが失敗する - 料理とソフトウェアは似ている

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2