問題
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
どのような原因が考えられるでしょうか。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。