🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Capybara

Capybaraは、 Rubyで開発されているWebアプリケーションテストフレームワークです。Webブラウザ不要でブラウザ上のユーザー操作及びJavaScriptの挙動を自動化することができます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

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

Q&A

1回答

6425閲覧

Rails Rspec Capybara でテストを実行するとエラー時のスクリーンショットが真っ白になってしまう

wawawatataru

総合スコア8

Capybara

Capybaraは、 Rubyで開発されているWebアプリケーションテストフレームワークです。Webブラウザ不要でブラウザ上のユーザー操作及びJavaScriptの挙動を自動化することができます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

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

0グッド

3クリップ

投稿2019/09/09 13:35

編集2019/09/10 15:30

問題

Ruby on Rails5速習実践ガイドに則って学習をすすめているのですが、
エラー時のスクリーンショットが真っ白になってしまい困っています。

# frozen_string_literal: true require "rails_helper" describe "タスク管理機能", type: :system do let(:user_a) { FactoryBot.create(:user, name: "ユーザーA", email: "a@example.com") } let(:user_b) { FactoryBot.create(:user, name: "ユーザーB", email: "b@example.com") } let!(:task_a) { FactoryBot.create(:task, name: "最初のタスク", user: user_a) } before do puts("タスク管理画面_before") visit login_path fill_in "メールアドレス", with: login_user.email fill_in "パスワード", with: login_user.password click_button "ログインする" end shared_examples_for "ユーザーAが作成したタスクが表示される" do it { expect(page).to have_content "最初のタスク" } end describe "一覧表示機能" do context "ユーザーAがログインしているとき" do let(:login_user) { user_a } it_behaves_like "ユーザーAが作成したタスクが表示される" end context "ユーザーBがログインしているとき" do let(:login_user) { user_b } it "ユーザーAが作成したタスクが表示されない" do expect(page).to have_no_content "最初のタスク" end end end describe "詳細表示機能" do context "ユーザーAがログインしているとき" do let(:login_user) { user_a } before do visit task_path(task_a) end it_behaves_like "ユーザーAが作成したタスクが表示される" end end describe "新規作成機能" do let(:login_user) { user_a } before do visit new_task_path fill_in "task-name", with: task_name click_button "登録する" end context "新規作成画面で名称を入力したとき" do let(:task_name) { "新規作成のテストを書く" } it "正常に登録される" do expect(page).to have_selector ".alert-success", text: "新規作成のテストを書く" end end end end

上のようなテストコードを書いています。
詳細表示機能ユーザーAがログインしているときのテストと
新規作成機能のテストが正常に通らず、エラーが発生するのですが、その際のスクリーンショットが真っ白になってしまい、
画像からなぜエラーが起きたのかわかりません。

下が実行時のエラーです。

$ bundle exec rspec spec/system/tasks_spec.rb DEPRECATION WARNING: Static attributes will be removed in FactoryBot 5.0. Please use dynamic attributes instead by wrapping the attribute value in a block: email { "test1@example.com" } To automatically update from static attributes to dynamic ones, install rubocop-rspec and run: rubocop \ --require rubocop-rspec \ --only FactoryBot/AttributeDefinedStatically \ --auto-correct (called from block (2 levels) in <main> at /Users/wawawatataru/Documents/rails_tut_taskleaf/taskleaf/spec/factories/users.rb:6) タスク管理画面_before Capybara starting Puma... * Version 3.12.1 , codename: Llamas in Pajamas * Min threads: 0, max threads: 4 * Listening on tcp://127.0.0.1:62395 .タスク管理画面_before .タスク管理画面_before [Screenshot]: /Users/wawawatataru/Documents/rails_tut_taskleaf/taskleaf/tmp/screenshots/failures_r_spec_example_groups_nested_nested_2_a_behaves_like_a_example_at___spec_system_tasks_spec_rb_19_565.png Fタスク管理画面_before [Screenshot]: /Users/wawawatataru/Documents/rails_tut_taskleaf/taskleaf/tmp/screenshots/failures_r_spec_example_groups_nested_nested_3_nested_正常に登録される_940.png F Failures: 1) タスク管理機能 詳細表示機能 ユーザーAがログインしているとき behaves like ユーザーAが作成したタスクが表示される should text "最初のタスク" Failure/Error: it { expect(page).to have_content "最初のタスク" } expected to find text "最初のタスク" in "Taskleaf\nタスク一覧\nログアウト\nログインしました\nログイン\nメールアドレス\nパスワード" Shared Example Group: "ユーザーAが作成したタスクが表示される" called from ./spec/system/tasks_spec.rb:46 # ./spec/system/tasks_spec.rb:19:in `block (3 levels) in <top (required)>' 2) タスク管理機能 新規作成機能 新規作成画面で名称を入力したとき 正常に登録される Failure/Error: fill_in "task-name", with: task_name Capybara::ElementNotFound: Unable to find field "task-name" that is not disabled # ./spec/system/tasks_spec.rb:54:in `block (3 levels) in <top (required)>' Finished in 9.31 seconds (files took 4.73 seconds to load) 4 examples, 2 failures Failed examples: rspec './spec/system/tasks_spec.rb[1:2:1:1:1]' # タスク管理機能 詳細表示機能 ユーザーAがログインしているとき behaves like ユーザーAが作成したタスクが表示される should text "最初のタスク" rspec ./spec/system/tasks_spec.rb:61 # タスク管理機能 新規作成機能 新規作成画面で名称を入力したとき 正常に登録される

また、能動的にスクリーンショットを撮ろうとして、以下のように記述するとスクリーンショットが正常に撮れるばかりか、
テスト通ってしまいます。

describe "新規作成機能" do let(:login_user) { user_a } before do page.save_screenshot "#{DateTime.now}.png" visit new_task_path page.save_screenshot "#{DateTime.now}.png" fill_in "task-name", with: task_name click_button "登録する" end

以下が実行結果です。

bundle exec rspec spec/system/tasks_spec.rb DEPRECATION WARNING: Static attributes will be removed in FactoryBot 5.0. Please use dynamic attributes instead by wrapping the attribute value in a block: email { "test1@example.com" } To automatically update from static attributes to dynamic ones, install rubocop-rspec and run: rubocop \ --require rubocop-rspec \ --only FactoryBot/AttributeDefinedStatically \ --auto-correct (called from block (2 levels) in <main> at /Users/wawawatataru/Documents/rails_tut_taskleaf/taskleaf/spec/factories/users.rb:6) タスク管理画面_before Capybara starting Puma... * Version 3.12.1 , codename: Llamas in Pajamas * Min threads: 0, max threads: 4 * Listening on tcp://127.0.0.1:63723 .タスク管理画面_before .タスク管理画面_before .タスク管理画面_before . Finished in 5.3 seconds (files took 5.82 seconds to load) 4 examples, 0 failures

どのような原因が考えられるでしょうか。

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

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

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

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

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

guest

回答1

0

Rails6系だとこの事象が起きるようです。

https://github.com/rspec/rspec-rails/pull/2141
https://github.com/rspec/rspec-rails/issues/2153

上記記事の通りrspec-railsのv4系を入れたら解決しました。

gem 'rspec-rails', git: 'https://github.com/rspec/rspec-rails.git', tag: 'v4.0.0.beta3'

投稿2019/12/30 08:15

daidai3110

総合スコア27

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問