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

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

新規登録して質問してみよう
ただいま回答率
86.02%
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

受付中

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

wawawatataru
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の基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

1回答

0グッド

3クリップ

4789閲覧

投稿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

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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答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

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

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

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Capybara

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

Ruby

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

RSpec

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

Ruby on Rails

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