前提・実現したいこと
Ruby, Rails6でアプリを開発しています。
その中でテストを書いているのですが、Rspec; system_specでCapybara::ElementNotFound:が出てしまい解消できません。
手動で自分で登録をやってみたりすると、普通にできるのですがいざテストを書いてみると、Capybara::ElementNotFound:と出てしまいます。
発生している問題・エラーメッセージ
Failure/Error: fill_in 'user[username]', with: 'Alice' Capybara::ElementNotFound: Unable to find field "user[username]" that is not disabled
該当のソースコード
users_spec.rb
require 'rails_helper' RSpec.describe User, type: :system do let(:alice) { create(:alice)} describe 'User CRUD' do describe 'before sign in' do describe 'sign in as new user' do context 'sign_in form is valid' do it "successed with sign in" do visit new_user_session_path fill_in 'user[username]', with: 'Alice' fill_in 'user[birthday]', with: '001996-11-09' fill_in 'user[email]', with: 'alice@example.com' fill_in 'user[password]', with: 'Password' fill_in 'user[password_confirmation]', with: 'Password' click_button 'Signup' expect(current_path).to eq login_path expect(page).to have_content 'User was successfully created' end end end end end end
devise/registrations/new.html.erb
bootstrapを使っているのでこんなコードになっています。
<div class="card col-sm-6 mx-auto mt-5"> <div class="card-body"> <h2 class="mt-1 mb-3"><%= t('.sign_up') %></h2> <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> <%= render "devise/shared/error_messages", resource: resource %> <div class="form-group"> <%= f.label :username %><br /> <%= f.text_field :username, class: "form-control" %> </div> <div class="form-group"> <%= f.label :birthday %><br /> <%= f.date_field :birthday %> </div> <div class="form-group"> <%= f.label :email %><br /> <%= f.email_field :email, autofocus: true, autocomplete: "email" %> </div> <div class="form-group"> <%= f.label :password %> <% if @minimum_password_length %> <em><%= t('devise.shared.minimum_password_length', count: @minimum_password_length) %></em> <% end %><br /> <%= f.password_field :password, autocomplete: "new-password" %> </div> <div class="form-group"> <%= f.label :password_confirmation %><br /> <%= f.password_field :password_confirmation, autocomplete: "new-password" %> </div> <div class="actions"> <%= f.submit t('.sign_up'), :class => "btn btn-primary btn-block" %> </div> <% end %> <%= render "devise/shared/links" %> </div> </div>
試したこと
とりあえず調べて出てくる以下の記事みたいなことは試しました。
CapybaraでElementNotFoundと出た時の対処法
Capybara の fill_in 対象はラベル以外でも指定できることを思い出そう
rails sで起動して新規登録画面に遷移し、記事のように開発者ツールを使って該当する箇所を見たのですが、
<input class="form-control" type="text" value="" name="user[username]" id="user_username">
このuser[username], user_usernameのどちらを試してもパスしませんでした。
どこに原因があるのかわからないので教えていただきたいです。
補足情報(FW/ツールのバージョンなど)
ruby3.0.2
rails 6.1.4.1
rspec 3.10
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。