rails初学者で、Ruby on Rails5速習実践ガイドでタスク管理アプリを作成しております。
Rspecで解決出来ないエラーが出てしまい、知見をお借りできればと思い質問させていただきました。
タスクの新規作成機能のSpecを追加し、テストを実行したのですが、
Capybara::ElementNotFound: Unable to find field "名称" that is not disabled
というエラーが出てきてしまいました。
該当すると思われるファイルは下記です。
#spec/system/tasks_spec.rb 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 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 '名称', with: task_name #この行が問題でテストが通らないようです。 click_button '登録する' end context '新規作成画面で名称を入力したとき' do let(:task_name) { '新規作成のテストを書く' } it '正常に登録される' do expect(page).to have_selector '.alert-success', text: '新規作成のテストを書く' end end context '新規作成画面で名称を入力しなかったとき' do let(:task_name) { '' } it 'エラーとなる' do within '#error_explanation' do expect(page).to have_content '名称を入力してください。' end end end end end
そして、エラーが下記の様になります。
$ bundle exec rspec spec/system/tasks_spec.rb 2020-08-XX-XXXX WARN Selenium [DEPRECATION] Selenium::WebDriver::Chrome#driver_path= is deprecated. Use Selenium::WebDriver::Chrome::Service#driver_path= instead. Capybara starting Puma... * Version 3.12.6 , codename: Llamas in Pajamas * Min threads: 0, max threads: 4 * Listening on tcp://127.0.0.1:59880 ...FF Failures: 1) タスク管理機能 新規作成機能 新規作成画面で名称を入力したとき 正常に登録される Failure/Error: fill_in '名称', with: task_name Capybara::ElementNotFound: Unable to find field "名称" that is not disabled [Screenshot]: tmp/screenshots/failures_r_spec_example_groups_nested_nested_3_nested_正常に登録される_786.png # ./spec/system/tasks_spec.rb:52:in `block (3 levels) in <top (required)>' 2) タスク管理機能 新規作成機能 新規作成画面で名称を入力しなかったとき エラーとなる Failure/Error: fill_in '名称', with: task_name Capybara::ElementNotFound: Unable to find field "名称" that is not disabled [Screenshot]: tmp/screenshots/failures_r_spec_example_groups_nested_nested_3_nested_2_エラーとなる_827.png # ./spec/system/tasks_spec.rb:52:in `block (3 levels) in <top (required)>' Finished in 7.98 seconds (files took 2.49 seconds to load) 5 examples, 2 failures Failed examples: rspec ./spec/system/tasks_spec.rb:59 # タスク管理機能 新規作成機能 新規作成画面で名称を入力したとき 正常に登録される rspec ./spec/system/tasks_spec.rb:67 # タスク管理機能 新規作成機能 新規作成画面で名称を入力しなかったとき エラーとなる
#config/locales/ja.yml ja: activerecord: errors: messages: record_invalid: 'バリデーションに失敗しました: %{errors}' restrict_dependent_destroy: has_one: "%{record}が存在しているので削除できません" has_many: "%{record}が存在しているので削除できません" models: task: タスク attributes: task: id: ID name: 名称 description: 詳しい説明 created_at: 登録日時 updated_at: 更新日時 user: name: 名前 email: メールアドレス admin: 管理者権限 password: パスワード password_confirmation: パスワード(確認) created_at: 登録日時 updated_at: 更新日時
'名称'というメソッドが無いと言われているのかと考えたのですが、
解決、確認する方法などありましたら教えていただけないでしょうか?
よろしくお願いいたします。
あなたの回答
tips
プレビュー