開発環境
ruby '2.6.3'
rails '6.0.2'
railsでconfirmダイアログのテストをする。
-
accept_confirm
だけで表示内容の確認とOKを押してくれる - Method: Capybara::Session#accept_confirm
systemテスト
context "削除する" do
it "投稿消去" do
click_button "消去する"
expect{
expect(page.accept_confirm).to eq "本当に削除しますか?"
expect(page).to have_content "レビューを消去しました。"
}. to change(@user.posts, :count).by(-1)
end
end
注意点
- expectのブロック内にひとつ以上のexpectもしくはfindを入れないと、ダイアログが表示されてacceptされる前に次へ進んでしまうので注意が必要です。
つまり
systemテスト
context "削除する" do
it "投稿消去" do
click_button "消去する"
expect{
expect(page.accept_confirm).to eq "本当に削除しますか?"
expect(page).to have_content "レビューを消去しました。"
# ↑この一文かsleepが必要です。
}. to change(@user.posts, :count).by(-1)
end
end
その他
slim
= button_to "消去する",post_path(@post), method: :delete, data: {confirm: "本当に削除しますか?"}
コントローラー
def destroy
@post = current_user.posts.find(params[:id])
flash[:notice] = "レビューを消去しました。"
@post.destroy
redirect_to user_path(current_user.id)
end