0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【結合テスト】「本当に削除しますか」のconfirmダイアログでOKボタンを押す方法

Posted at

やりたいこと

結合テストにおいて、削除のリンクを踏んだあとに出現するconfirmダイアログのOKボタンをクリックしたい!

<%= link_to "削除", post_path(post.id), method: :delete, data: { confirm: '本当に削除しますか?' }  //投稿の削除ボタン%>

↓confirmダイアログ↓
スクリーンショット 2021-02-08 9.12.21.png

実装方法

page.accept_confirm do
  //削除ボタンをクリックする記述
end

↓記述例↓

page.accept_confirm do
  all(".more")[0].hover.click_link('削除', href: post_path(@post1.id))
end

.moreを持つ要素を全て取得し、0番目の要素にhoverを当てています。
そうすることで削除ボタンが表示され、 .click_link で削除ボタンのリンクを踏んでいます。

expect{ } との合わせ技

実際の結合テストでは、モデルのカウントが1下がることを確認する必要があると思います。
下記のように記述することで上手くいきました。

expect{
  page.accept_confirm do
    all(".more")[0].hover.click_link('削除', href: post_path(@post1.id))
  end
  expect(page).to have_content('投稿を削除しました!')   //この記述がポイント!!
}.to change { Post.count }.by(-1)

「この記述がポイント」の行の有無で、カウントが1下がるの検証結果が変わることがあります。
理由は、削除の処理が完了する前にテストが先に進んでしまうことがあるからです。
そのため、sleepやhave_〇〇を使い、処理が完了するまで時間を数秒だけ稼ぐ必要があります。
こちらの記事を参考にさせていただきました。
使えるRSpec入門・その4「どんなブラウザ操作も自由自在!逆引きCapybara大辞典」

以上です!
テストコードに予想以上に詰まってしまったため、記事にさせていただきました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?