質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WSL(Windows Subsystem for Linux)

WSL (Windows Subsystem for Linux) は、Windows10のOS上でLinux向けのバイナリプログラムを実行可能にする機能です。また、WindowsOSのAPIを用いた仕組みを提供しており、Linux側からWindowsOSへのファイルアクセスもできます。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

0回答

2617閲覧

WSL環境上でRails6のシステムテスト(rails test:system)が一部エラーになる。

raccy

総合スコア21735

WSL(Windows Subsystem for Linux)

WSL (Windows Subsystem for Linux) は、Windows10のOS上でLinux向けのバイナリプログラムを実行可能にする機能です。また、WindowsOSのAPIを用いた仕組みを提供しており、Linux側からWindowsOSへのファイルアクセスもできます。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2019/10/12 01:05

WSL環境上(Ubuntu 18.04 LTS使用)でRails 6.0のシステムテスト(rails test:system)を行うと、一部がエラーになります。

エラーの詳細

全てがエラーになるのではなく、最初の1個または2個のみ成功します。実行する度に成功する個数は変わります。また、テストを一つだけした場合は必ず成功します。全てのテストについて、一つだけの状態で成功することを確認しており、テスト自体に問題はないと思われます。

エラーメッセージは下記のものが1~3個表示されます。

Error: MemosTest#test_updating_a_Memo: Selenium::WebDriver::Error::InvalidSessionIdError: invalid session id

テスト環境の構築方法と設定

テスト環境は以下のようにして構築しました。あらかじめRuby(rbenv)、Node.js(nodenv)、Yarn(公式レポジトリ)の最新版を入れており、また、build-essentialやlibsqlite3-dev等のパッケージも入れた状態です。

gem install rails rails new test_app cd test_app bundle install bundle yarn:install rails generate scaffold Memo title:string:index content:text rails db:create rails db:migrate rails test rails server

この時点で、 http://localhost:3000/memos にアクセスして、Memoの作成や閲覧等ができることを確認しています。

システムテストのためのchromium-chromedriverをいれます。

suda apt install chromium-chromedriver

システムテストを実施してみます。

rails test:system

デフォルトのままではChromeの起動自体がクラッシュして下記エラーが発生します。

Selenium::WebDriver::Error::UnknownError: unknown error: Chrome failed to start: crashed

そこでtest/application_system_test_case.rbを下記のように書き換えます。

require "test_helper" class ApplicationSystemTestCase < ActionDispatch::SystemTestCase driven_by :selenium, using: :headless_chrome, screen_size: [1400, 1400] do |driver_option| driver_option.add_argument('no-sandbox') driver_option.add_argument('disable-gpu') driver_option.add_argument('disable-features=VizDisplayCompositor') end end

【注意】この書き方はRails 6.0から可能になった書き方で、Rails 5.xではこの書き方はできません。今回試したchromiumではdisable-gpuオプションは無くても大丈夫なようですが、付けています。逆にdisable-features=VizDisplayCompositorは必須です。なお、ドライバーへのオプションは--があってもなくても良いようです。

改めてrails test:systemを実行すると、

4 runs, 2 assertions, 0 failures, 3 errors, 0 skips

テスト4つのうち3つがエラーになり、成功は1つのみです。なお、成功が2つになるときもありました。chromium自体はうまく起動するときがあるようです。

試したこと

窓サイズが大きすぎるとメモリ不足で失敗するという情報があったため、次のように800x600にしてみました。

require "test_helper" class ApplicationSystemTestCase < ActionDispatch::SystemTestCase driven_by :selenium, using: :headless_chrome, screen_size: [800, 600] do |driver_option| driver_option.add_argument('no-sandbox') driver_option.add_argument('disable-gpu') driver_option.add_argument('disable-features=VizDisplayCompositor') end end

しかし、現象は変わらず、エラーが発生します。そもそもメモリは10GB以上空いてますので、関係なさそうです。(CI等メモリが限られている環境では有効のようですが)

なお、driven_byの引数では無く、driver_option.add_argument('window-size=800,600')とドライバーオプションとして窓サイズを指定しても変わりはありませんでした。

まだ試してないこと

Vagrant(with Hyper-V)で作った(GUI環境が入っていない)Ubuntu 18.04 LTSではどうなのか試そうとしましたが、IPv6の所為でパッケージが落ちてこず、ちょっと環境構築に手間取っています。既にRails 6.0でうまくいったという人がいれば教えてください。その他、docker上とかはまだ試していないです。なので、WSL特有なのかはよくわかっていません。

環境

OS: Windows 10 Pro 1903
WSL上のLinux: Ubuntu 18.04.3 LTS
Ruby: 2.6.5 (rbenv install経由)
Node.js: 12.11.1 (nodenv install経由)
Yarn: 1.19.1 (apt経由1.19.1-11)
Ruby on Rails: 6.0.0 (gem経由)
Chromium: 77.0.3865.90 (apt経由77.0.3865.90-0ubuntu0.18.04.1)
ChromDriver: 77.0.3865.90 (apt経由77.0.3865.90-0ubuntu0.18.04.1)
Ubuntu全体のアップデート日: 2019年10月12日

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問