【rspec】fill_inがあっているのにfetureテストが失敗する原因 ログインで失敗してない?
rspecのfeatureテストが通らない
capybaraでわかりやすくて便利なのですが、fill_inハマったので解決策の1つを紹介します。
expect内のfiii_inのところでどうしてもエラーが起きてしまう。
検証して生成されたhtmlから見つけたidを指定しても、新たにidを作っても、findを使ってもできませんでした
。。
しかし数時間の格闘の末結論が出ました。
この記事のゴール
fill_inのエラー解決策の1つとして検証してみてください!
結論 ログインに失敗している
自分の場合は結論ログインがうまくできていないためエラーが起きていました。
失敗したコード
scenario "user creates a new topic" do
user = FactoryBot.create(:user)
visit root_path
click_link "ログイン"
fill_in "Email", with: user.email
fill_in "Password", with: user.password
ココ→ click_link "ログイン"
expect {
visit new_topic_path
fill_in "topic_description", with: "test"
click_button "投稿"
expect(page).to have_content "投稿しました"
expect(page).to have_content "test"
expect(page).to have_content "#{user.name}"
}.to change(user.topics, :count).by(1)
click_linkでログインを指定ためsubmitではなくヘッダーのリンクをクリックしていました。
そのためログインページでメールアドレスとパスワードを入力して、もう一度ログインページをクリックしていました。。
なんと不毛なことを。。。。
ということでclick_linkではなく、click_buttonを指定。
scenario "user creates a new topic" do
user = FactoryBot.create(:user)
visit root_path
click_link "ログイン"
fill_in "Email", with: user.email
fill_in "Password", with: user.password
ココ→ click_button "ログイン"
expect {
visit new_topic_path
fill_in "topic_description", with: "test"
click_button "投稿"
expect(page).to have_content "投稿しました"
expect(page).to have_content "test"
expect(page).to have_content "#{user.name}"
}.to change(user.topics, :count).by(1)
これでちゃんと通りました。
まとめ
fill_inでエラーが起きているのでfill_inばかり見ていましたが、一度立ち止まって全体を見ることの重要性を再認識できました。
参考になれば嬉しいです!
Author And Source
この問題について(【rspec】fill_inがあっているのにfetureテストが失敗する原因 ログインで失敗してない?), 我々は、より多くの情報をここで見つけました https://qiita.com/hiruhiru/items/9eb5a6453a0fe11a3849著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .