大いにはまったので・・・。
主に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?'
とする。メッセージは指定しなくてもいいかもだけど。
accept_js_confirm
というのがdeprecatedになってた。新しい情報が少なかった・・・。
で、OKを押した場合とキャンセルした場合の2つに分岐したい。
ネストはここでマージされた模様。
あとはcurrent_path
とか便利。リダイレクトかレンダリングした後の画面のパス確認