3

在 rspec 中使用 Capybara 测试 javascript 警报。为什么

expect{
  click_link "Cancel my account"
  page.driver.browser.switch_to.alert.accept
}.to change(User, :count).by(-1)

失败。然而

puts User.count
expect{
  click_link "Cancel my account"
  page.driver.browser.switch_to.alert.accept
  puts User.count
}.to change(User, :count).by(-1)

没有?如何修复测试?没有reload功能User

4

1 回答 1

6

由于您使用的是 javascript 规范,因此浏览器/JS 与您的测试在不同的进程中运行,并且 Capybara 不知道要等到浏览器请求完成后再继续,因为您在接受后没有发出任何 Capybara 命令警报。我猜测puts增加的时间延迟足以让实际数据库发生变化。如果您想等待 Capybara 返回直到下一页开始加载(因此数据库已更新),您可以在块的末尾执行以下操作:

page.find('head').
于 2013-03-03T21:54:52.667 回答