RSpecでdata-confirmのOKかキャンセルを選択する方法
はじめに
RSpecのテストコードで、data-confirmのOKかキャンセルを選択する方法について
テストするビューの一部
まず、以下のようなtask一覧ページのビューがあるとします。
<tbody class='task_list'> <% @tasks.each do |task| %> <tr> <td><%= task.title %></td> <td><%= task.status %></td> <td><%= short_time(task.deadline) if task.deadline? %></td> <td><%= link_to 'Show', [@project, task] %></td> <td><%= link_to 'Edit', edit_project_task_path(@project, task) %></td> <td><%= link_to 'Destroy', [@project, task], method: :delete, data: { confirm: 'Are you sure?' } %></td> </tr> <% end %> </tbody>
上記の「<%= link_to 'Destroy'・・・」の部分に注目してください。
これは'Destroy'というリンクをクリックした時に、'Are you sure?'という確認ダイアログが出て、「OK」か「キャンセル」かを選べるようになります。
今回はこの部分に関して、テストによって「OK」か「キャンセル」かを選択したいときの方法について解説します。
RSpecでdata-confirmのOKを選択する方法
2通りの方法があります。
1つ目の方法
一つ目の方法は、click_linkなどの後に下記のようなメソッドを入れる方法です。
click_link 'Destroy' page.driver.browser.switch_to.alert.accept
2つ目の方法
2つ目の方法は、capybaraで用意されている「accept_confirm」を利用する方法です。
page.accept_confirm do click_link 'Destroy' end
RSpecでdata-confirmのキャンセルを選択する方法
続いて、キャンセルを選択する方法です。
こちらは先程の「accept」の部分を「dismiss」に変えるだけです。
click_link 'Destroy' page.driver.browser.switch_to.alert.dismiss
page.dismiss_confirm do click_link 'Destroy' end