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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Ruby

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

RSpec

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

解決済

systemspec実行時、Capybara::ElementNotFoundのエラーを解決したい

hinata_hakumai
hinata_hakumai

総合スコア3

Ruby

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

RSpec

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

1回答

0評価

0クリップ

1058閲覧

投稿2021/11/17 06:48

前提・実現したいこと

投稿アプリを作成しています。
capybaraを導入し、systemspecでテストを行いたいのですがどうやってもエラーが
解決しないため,ご助言いただければと思います。

試したこと

下記のように、click_linkを用いたテストを行ったのですがリンクが見つからないとのエラー文が出ます。さらに、fill_inを用いたログインのテストも通らないです。

fill_inに関して試したこと
①"user[email]"を"user_email"や"メールアドレス"に変更。
②pathが違うのかと思い、visit "/users/sign_in"に変更したり、routesを確認。③capybara導入の見直し
④dockerコンテナの再起動
試行錯誤を繰り返したものの、いずれも変化がなく、手詰まりです。

どこか見直した方がいい箇所やアドバイスがあればご教授いただけますと幸いです。
よろしくお願い致します。

発生している問題・エラーメッセージ

Failure/Error: click_link "サインインする" Capybara::ElementNotFound: Unable to find link "サインインする"
Failure/Error: fill_in "user[email]", with: "test1@example.com" Capybara::ElementNotFound: Unable to find field "user[email]" that is not disabled

該当のソースコード

ruby

require 'rails_helper' RSpec.describe 'ログイン', type: :system do describe 'ログイン' do before do visit new_user_registration_path end it '「サインインする」をクリックすると正しく遷移する' do click_link "サインインする" expect(current_path).to eq new_user_session_path end         it 'ログインできる' do visit root_path fill_in "user[email]", with: "test1@example.com" fill_in "user[password]", with: "foobar" click_button "ログインする" end end end

ruby

<% provide(:title, "ユーザー登録") %> <div class="main"> <div class="card devise-card"> <div class="form-wrap"> <div class="form-group text-center"> <h2 class="logo-img mx-auto"></h2> <p class="text-secondary">ユーザー登録</p> </div> <%= form_with scope: resource, as: resource_name, url: registration_path(resource_name), local: true do |f| %> <%= render 'devise/shared/error_messages' %> <div class="form-group"> <%= f.email_field :email, autofocus: true, placeholder: "メールアドレス", class: "form-control" %> </div> <div class="form-group"> <%= f.text_field :name, autofocus: true, placeholder: "名前", class: "form-control" %> </div> <div class="form-group"> <%= f.label :profile_photo, "プロフィール画像" %> <%= f.file_field :profile_photo, class: "profile-control" %> </div> <div class="form-group"> <%= f.password_field :password, autocomplete: "off", placeholder: "パスワード", class: "form-control" %> </div> <div class="form-group"> <%= f.password_field :password_confirmation, autocomplete: "off", placeholder: "パスワードの確認", class: "form-control" %> </div> <div class="actions mt-3"> <%= f.submit "登録する", class: "btn btn-primary w-100" %> </div> <% end %> <br> <p class="devise-link"> アカウントをお持ちですか? <%= link_to "サインインする", new_user_session_path %> </p> </div> </div> </div>

ruby

<% provide(:title, "ログイン") %> <div class="main"> <div class="card devise-card"> <div class="form-wrap"> <div class="form-group text-center"> <h2 class="logo-img mx-auto">ログイン</h2> </div> <%= form_with scope: resource, as: resource_name, url: session_path(resource_name), local: true do |f| %> <%= devise_error_messages! %> <div class="form-group"> <label for="user_email">テストユーザーの方は「example@example.com」をご利用ください。</label> <%= f.email_field :email, autofocus: true, placeholder: "メールアドレス", class: "form-control", id: "user_email" %> </div> <div class="form-group"> <label for="user_password">テストユーザーの方は「foobar」をご利用ください。</label> <%= f.password_field :password, autocomplete: "off", placeholder: "パスワード", class: "form-control", id: "user_password" %> </div> <div class="actions mt-3"> <%= f.submit "ログインする", class: "btn btn-primary w-100" %> </div> <% end %> <br> <p class="devise-link"> アカウントをお持ちでないですか? <%= link_to "登録する", new_user_registration_path %> </p> </div> </div> </div>

ruby

rails_helper.rb require 'spec_helper' ENV['RAILS_ENV'] ||= 'test' require File.expand_path('../config/environment', __dir__) if Rails.env.production? abort('The Rails environment is running in production mode!') end require 'rspec/rails' require 'capybara/rspec' require 'capybara/rails' Dir[Rails.root.join('spec/support/**/*.rb')].sort.each { |f| require f } begin ActiveRecord::Migration.maintain_test_schema! rescue ActiveRecord::PendingMigrationError => e puts e.to_s.strip exit 1 end RSpec.configure do |config| config.fixture_path = "#{::Rails.root}/spec/fixtures" config.use_transactional_fixtures = true config.infer_spec_type_from_file_location! config.include Devise::Test::ControllerHelpers, type: :controller config.include RequestSpecHelper, type: :request config.include Devise::Test::IntegrationHelpers, type: :system config.include FactoryBot::Syntax::Methods end

イメージ説明

補足情報(FW/ツールのバージョンなど)

MacOS
docker

良い質問の評価を上げる

以下のような質問は評価を上げましょう

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

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

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Ruby

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

RSpec

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