Edited at

CapybaraでのJSのconfirmダイアログのテストについて

More than 3 years have passed since last update.

大いにはまったので・・・。


主にdeleteの時のcomfirmはどうするかと、ネストについて

gemのインストール、設定はできてるものとして・・・。

すいません、ご指摘いただいたので記載します。何か不足な点があるかもしれないですが(汗 遠慮なくご指摘いただけると幸いです。

Gemfile

gem 'capybara'

gem 'capybara-webkit'

rails_helper.rb内に以下を追記

Capybara.javascript_driver = :webkit

動作:



  • showに'Delete'リンクだけがある

  • 無事削除できたらルートへリダイレクト、"Successfully Deleted a Pin"のメッセージを出す

require 'rails_helper'

RSpec.feature "Deleting Hoges", type: :feature, js: true do
let(:hoge) { FactoryGirl.create(:hoge) }

background do
visit hoge_path(hoge)

expect(page).to have_link 'Delete', href: hoge_path(hoge)

link = find_link 'Delete'
expect(link['data-confirm']).to eq 'Are you sure?'
end

scenario "Accepting a confirm" do
page.accept_confirm 'Are you sure?' do
click_link 'Delete'
end
expect(current_path).to eq root_path
within '.alert' do
expect(page).to have_content "Successfully Deleted a hoge"
end
end

scenario "Dissmissing a confirm" do
page.dismiss_confirm 'Are you sure?' do
click_link 'Delete'
end
expect(current_path).to eq hoge_path(hoge)
end
end

featureの行に, js: trueを追加するのを忘れずに。

まず、background内でページにvisitしておく。beforeみたいなもの?

ついでに'Delete'リンクのdata-confirmの値を確認。

page.accept_confirmを使う。それにブロックを渡す。


ブロック内にはそのconfirmを発火させる動作。この場合は'Delete'というリンクをクリックする。

background内で一応メッセージの内容は確認しているが、実際に表示されるかどうか、ってところでpage.accept_confirm 'Are you sure?'とする。メッセージは指定しなくてもいいかもだけど。

http://stackoverflow.com/questions/26275359/deprecation-warning-from-capybara

accept_js_confirmというのがdeprecatedになってた。新しい情報が少なかった・・・。

で、OKを押した場合とキャンセルした場合の2つに分岐したい。

http://tirdadc.github.io/blog/2014/09/11/nested-feature-tests-with-capybara-and-rspec/

ネストはここでマージされた模様。

https://github.com/jnicklas/capybara/commit/61524b0fd32a1fb55b82853bdc4a0293e9fcdef0

あとはcurrent_pathとか便利。リダイレクトかレンダリングした後の画面のパス確認

http://stackoverflow.com/questions/21592115/javascript-confirmation-dialog-in-capybara-webkit-driver