我正在使用Devise并为用户删除自己帐户的情况编写测试但我仍然坚持如何调用确认框并单击“确定”。
这是链接和我的测试:
<p><%= link_to "Delete my account", registration_path(resource_name), :data => { :confirm => "Are you sure?" }, :method => :delete %></p>
规格/请求/ users_spec.rb
scenario 'user deletes account' do
make_user_and_login
click_link('Account Settings')
page.should have_selector('title', :text => 'Account Settings')
click_link('Delete my account')
# Are You Sure?
# click OK in confirm box
# page.should etc.....
end
如何做到这一点?
答案 0 :(得分:6)
确保capybara使用支持javascript的驱动程序。 然后试试这个:
page.driver.browser.switch_to.alert.accept
或者,取消:
page.driver.browser.switch_to.alert.dismiss
答案 1 :(得分:3)
尝试
page.evaluate_script('window.confirm = function() { return true; }')
这应该有用,然后检查类似
的内容page.should have_content "Account deleted"
答案 2 :(得分:1)
正如@suweller所说,我们都在使用Capybara::RackTest
默认驱动程序。但是,如果没有更改任何设置并在我的rspec测试中添加:js => true
,我会让它们通过,之后我会收到相同的错误。
这使我至少可以使用page.driver.browser.switch_to.alert.accept
。