(自分用メモ)最終課題3 ECサイト Rspec system_spec
<今回のケースの結論>
Click_link ”文言”ではなく、visit 該当pathでテスト通る
<以下本文>
■現状
表題の件、最終課題3にて、system sepcを書いております。
bundle exec rspec実行で以下のエラーが起きます。
■実際に試したこと
①capybara、selenium-webdriverの導入
「`click_link'というメソッドは定義されていない」
というメッセージに対して、Gemを導入するも結果変わらず
・過去の質問事例を参考に以下をインストール済みです。
gem selenium-webdriver(require 'selenium-webdriver'をrails_helperに記載)
gem capybara(require 'capybara/rspec'をspec_helperに記載)
過去事例参考
②NoMethodError: undefined method `click_link' forでググりましたが、
undefined method の後に続くものが必ずしも`click_link' foでないと考え、RSpec undefined methodでググりました。
以下を参考にして実行しましたが、結果は変わらず同じエラーでした。
※現状のファイルは全て元に戻しました
■やりたいこと
system specを通したい。
■git(PRレビュー)
回答
ユーザー画像
メンターHyo
2023/1/9 12:59
undefined method の後に続くものが必ずしも`click_link' foでないと考え、RSpec undefined methodでググりました。
そのように考えた根拠がわからないので確実にしておきましょう!
例えばclick_linkをコメントアウトした際に、他のメソッドでも同じエラーが発生するか確認すればそうであるといえますね。
これによりclick_linkだけの問題なのか、capybara全体の問題なのかを切り分けることができます。
ユーザー画像
長井宏樹
2023/1/9 15:17
メンターHyo様
ご回答ありがとうございます。
capybara全体の問題だと考えております。
根拠は以下と考えております。
・click_linkをvisitに変更しても、NoMethodError: undefined method `visit' となった為、click_linkだけの問題ではない
・15件のテストも、capybaraに関連する該当テストのみが引っかかる為、
・グーグル検索でも、NoMethodError: undefined method click_link' の例がずばり出るわけでもなく、 undefined method
○○○'のエラーが多い
しかしながら、過去質問事例を見ても、
Gem capybaraをインストールアンインストールを繰り返して作動した、
dockerコンテナを止めて、再度立ち上げ作動した
など、具体的な解決方法が見つけられなかった為、質問させて頂きました。
手元でも、capybaraとselenium-webdriverで検索しておりますが、検索一巡しても明確な解決方向性が見つからない為、もう少しヒントを頂けますと幸いです。
ユーザー画像
Shioji(メンター)
2023/1/9 20:15
原因の切り分けができていて良いと思います。
copybaraの読み込みができていないエラーということですが、
system sepcの三行目
RSpec.describe "Products", type: :request do
typeがrequestになっているのでここをtype: :systemに変えてあげるとどうでしょうか?
ユーザー画像
長井宏樹
2023/1/9 21:29
Shioji(メンター)様
ご回答ありがとうございます。
変更しましたが、結果変わらずでしたが、エラーメッセージは以下のように変わりました。
まずはこのエラーメッセを当たってみます。
visitでのエラーメッセ
click_link でのエラーメッセ
回答待ちの間に色々調べました。回答の方向性は以下であっていますでしょうか?
上記の過去質問を読みましたが、以下3点ファイル新規作成、追記すること。
・capybara.rb
・docker-compose.yml
・selenium.rb
(自身で調べておきながら混乱しております。
やり方がたくさんあり、エラー解決の方向性が決まっていない状態です。ご助言頂けますと幸甚です。)
・他回答待ちの際に実施したこと
回答待ちの間に次にリンク試してみました。がダメでした。
ユーザー画像
中野(メンター
2023/1/9 22:07
「click_link」で問題なく遷移できそうですが、「click_on」を使うとどうでしょうか?
また、「一覧ページへ戻る」のリンクじゃなく、「Home」などで使うとどうでしょうか?
「click_link」が問題ないのか、「一覧ページへ戻る」のリンクが問題ないのか切り分けたいです。
※visitは文字列ではなく、pathを引数にしましょう。
ユーザー画像
長井宏樹
2023/1/10 16:23
中野様
ご回答ありがとうございます。
以下試してみました。
・click_link "HOME"の場合
エラーメッセージ
Failure/Error: click_link 'HOME'
Capybara::ElementNotFound:
Unable to find link "HOME"
・click_on "一覧に戻る"の場合
エラーメッセージ
Failure/Error: click_on '一覧ページへ戻る'
Capybara::ElementNotFound:
Unable to find link or button "一覧ページへ戻る"
・click_on "home"の場合
エラーメッセージ
Failure/Error: click_on 'home'
Capybara::ElementNotFound:
Unable to find link or button "home"
・visit 'potepan_category_path(taxons.id)'の場合
エラーメッセージ
Failure/Error: visit 'potepan_category_path(taxons.id)'
ActionController::RoutingError:
No route matches [GET] "/potepan_category_path(taxons.id)"
中野様の
>「click_link」が問題ないのか、「一覧ページへ戻る」のリンクが問題ないのか切り分けたいです。
については、結局どちら側に問題があるのか、わからないままでしたが、「 Capybara::ElementNotFound:」で過去質問検索をかけたところ
こちらの事例と本質的には似ているのかと思いました。
※現在このやり方でエラー解決を試みております。
ですが、長らく時間を空けてしまった為、一旦投稿させてください。
・質問
エラー解決の方向性は上記であっていますでしょうか。
それとも
同じ投稿者の方が、以下のやり方で解決(解方は明記されていない)しておりますが、
やはり以下3点ファイル新規作成、追記しないといけないのでしょうか
・capybara.rb
・docker-compose.yml
・selenium.rb
ユーザー画像
長井宏樹
2023/1/10 20:05
追記です。
上記デバッグの方法を確認して、
click_link(今回の当方のケース)やclick_on(過去事例)がどこの要素にかかっているか。確認することが重要と考えました。
その上で、
上記参考にリンクにidをつけてみましたが、失敗(むしろ今まで通っていたテストが通らなくなった)
色々試しましたが、手詰まり感が強く、
そもそもロンとして解き方の方向性が根本的に間違っているのでしょうか?
■git
ユーザー画像
長井宏樹
2023/1/10 22:01
該当箇所
visit potepan_category_path(taxon.id)と記載したところテスト通りました。
お騒がせしました。
Discussion