【问题标题】:Capybara & Rspec: How to delete an account?Capybara & Rspec:如何删除帐户?
【发布时间】:2012-09-08 20:41:00
【问题描述】:

我正在使用 Devise 并为用户删除自己的帐户的场景编写测试,但我不知道如何调用确认框并单击“确定”。

这是链接和我的测试:

<p><%= link_to "Delete my account", registration_path(resource_name), :data => { :confirm => "Are you sure?" }, :method => :delete %></p>

spec/requests/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

如何做到这一点?

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-3 devise capybara rspec-rails


【解决方案1】:

确保 capybara 使用的是支持 javascript 的驱动程序。 然后试试这个:

page.driver.browser.switch_to.alert.accept

或者,取消:

page.driver.browser.switch_to.alert.dismiss

【讨论】:

  • 不幸的是我得到:Failure/Error: page.driver.browser.switch_to.alert.accept NoMethodError: undefined method 'switch_to' for #&lt;Capybara::RackTest::Browser:0x588d0f8&gt;
  • 你使用的是Capybara::RackTest,这是一个不支持javascript的无头浏览器。
【解决方案2】:

试试

page.evaluate_script('window.confirm = function() { return true; }')

这应该可以,然后检查类似的东西

page.should have_content "Account deleted"

【讨论】:

  • 尝试此操作时出现此错误:Failure/Error: page.evaluate_script('window.confirm = function() { return true; }') Capybara::NotSupportedByDriverError: Capybara::NotSupportedByDriverError
  • 前段时间我也遇到过这个问题,不知道是什么原因造成的。对我来说,这是通过更新我的宝石解决的
  • 因为你使用的是Capybara::RackTest。此驱动程序不支持执行任何 javascript
【解决方案3】:

正如@suweller 所说,我们都在使用Capybara::RackTest 默认驱动程序。但是,在没有更改任何设置并在我的 rspec 测试中添加 :js =&gt; true 的情况下,我让它们通过了,而在我遇到与您相同的错误之前。

这让我至少可以使用page.driver.browser.switch_to.alert.accept

【讨论】:

    猜你喜欢
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    相关资源
    最近更新 更多