(自分用メモ)最終課題3 ECサイト requests_specにおいてスコープ限定(within)で囲わないとエラーが出る
■現状
表題の件、最終課題2にて、PR提出→レビューを頂きました。
以下のようなご指摘を受けました。
withinを削除してテストをかけたところ以下のようにエラーが出ました。
・エラー文
赤字部分を期待していたけど、実際にあったのは緑字部分だよ。
→しかし、赤字部分と緑字部分は同じように見えます。
■試したこと
スコープで過去質問検索
→今回の自分のケースとは違う
システムスペック、リクエストスペックの書き分けの認識を確認
■質問
・まず始めに、リクエストスペックでは、withinを使わないことが一般的なのでしょうか。
課題3でのカテゴリーページではrequestspecにて、withinを使用しており既にマージ許可も頂いており、
明確な基準がないのかなと、少し当惑しております。
・このエラーについて解き方のヒントをいただくことはできますでしょうか。※いい質問方法でなく申し訳ありません
(自身でも調べましたが、的を射る回答を得ることができませんでした。)
・レビューでのご指摘に従うと、systemspecでは同じようなテストは既に記載済みで、
ならば、いっそのことrequestspecでの関連商品のテストは削除するべきかと考えています。この考えは正しいでしょうか。
■やりたいこと
テスト通して、連続LGTMをもらいたい
カリキュラム終了期限が迫っており、可能な限り早く解決したいと思っております。
ご協力いただけますと幸いです。
■git(PRレビュー)
回答
ユーザー画像
メンターHyo
2023/1/20 11:18
赤字部分と緑字部分は同じように見えます。
赤字部分は省略されているので同じに見えることは無いかなと思いましたが、どこを見て同じと判断されましたか?
明確な基準がないのかな
エンジニアそれぞれ別々のバックグラウンドがあり、すべてのエンジニアで意見が一緒になることはありません。
それを防ぐために企業側でコーディングルールを設けることはありますが、すべてを細かく決めているわけでなく、結局レビューするエンジニアに依存してしまう部分は存在します。
今回のwithinもその類かなと。また単純にLGTM出したレビュアーの見落としである可能性もあるかなと思います
テストは削除するべきかと考えています
まずsystem specのは表示に関するテストですが、今回はデータに関するテストで意図が違うため残しておいたほうがいいでしょう。
このエラーについて解き方のヒントをいただくことはできますでしょうか
withinを省くとhtml全体のデータの確認をすることになるのでテストは落ちないはずです。
それが落ちるということは、そもそもテスト(データ)自体が間違えていることも考えないといけないです。
正しくデータを設定できているか確認したいですね。あとは最初の質問のとおり、赤字部分と緑字部分の差分を正確に理解したいです
ちなみに個人的にもリクエストにタグは含めたくないなと感じます(含めることはできますが
request_specはリクエストとレスポンスの状態をテストするもので、「表示」を確認しているわけではないです。
コントローラで取得したデータをviewに渡しますが、その「データ」についてテストしている理解です。
タグまで指定するとそれは表示される場所まで指定することになるので「表示」を意識したテストになってしまうと思います。
コントローラとしてはデータを渡せれば良くて、それがどこで表示されるかまでは気にしなくていいはずです。
今回もおそらくそれゆえのご指摘なのかなと推測しています(指摘されたご本人に聞かないとわかりませんが
カリキュラム終了期限が迫っており、可能な限り早く解決したいと思っております。
こちらは生徒さん側の都合であり、それにより我々がレビュー基準を下げたりすることはできませんのでご了承ください。
一旦最初の質問に対応していただければと思います!
ユーザー画像
長井宏樹
2023/1/20 11:43
メンターhyo様
ご回答ありがとうございます。
>赤字部分は省略されているので同じに見えることは無いかなと思いましたが、どこを見て同じと判断されましたか?
省略されているとはわかりませんでした。冒頭部分のみで判断しておりました。済みません。
>まずsystem specのは表示に関するテストですが、今回はデータに関するテストで意図が違うため残しておいたほうがいいでしょう。
承知しました。
>正しくデータを設定できているか確認したいですね。あとは最初の質問のとおり、赤字部分と緑字部分の差分を正確に理解したいです
一旦以下のコードにてテスト通りましたので、これでPR提出したいと思います。(このスレッドも解決済へ)
expect(response.body).to include(related_products[0].name)
expect(response.body).to include(related_products[0].display_price.to_s)
>こちらは生徒さん側の都合であり、それにより我々がレビュー基準を下げたりすることはできませんのでご了承ください。
失礼しました。甘えておりました。
Discussion