scaffoldで生成したリソースのdestroy時のconfirmダイアログをテストする

参考: I still get WebkitNoResponseError · Issue #181 · thoughtbot/capybara-webkit · GitHub

scaffoldすると「Destroy」リンクをクリックしたときに
"Are you sure?" というJavaScriptのAlertボックスが表示されますが、
それをハンドリングしてテストしてみます。

def handle_js_confirm(accept=true)
  page.evaluate_script "window.original_confirm_function = window.confirm"
  page.evaluate_script "window.confirm = function(msg) { return #{!!accept}; }"
  yield
ensure
  page.evaluate_script "window.confirm = window.original_confirm_function"
end

まずはspecファイルにこんな感じのメソッドを定義します。
(どこに定義するのがベストなのかわかんないけど、spec_helper.rbの周辺が妥当ですかね…)

次に実際のインテグレーションテスト。

describe "Users" do
  it "shows yes/no dialog when destroy link was clicked", js:true do
    handle_js_confirm do
      click_link "削除"
    end
    page.should have_content("削除しました")
  end
end

日本語になってますが大体こんな雰囲気で。