javascript - 当页面上存在 JavaScript 错误时,如何使用 Capybara-Webkit 在功能测试中失败?

标签 javascript bdd capybara capybara-webkit

我正在使用 Cucumber、Capybara 和 Capybara-webkit 在我的 Ruby on Rails 应用程序中测试不同的场景。

有没有一种方法可以在场景运行时检测页面上的任何 JavaScript 错误并使测试失败?作为我们自动化测试运行的一部分,我们正在使用这些测试来确保我们不会破坏更改之间的功能(包括 JavaScript)。

我可以在测试输出中看到失败,但它并没有使测试失败:

http://127.0.0.1:54928/...|16|ReferenceError: Can't find variable: $
http://127.0.0.1:54928/...|16|ReferenceError: Can't find variable: $
...

谢谢!

更新:我发现的一种方法是有一个步骤尝试执行一些只有在以前的错误没有发生时才有可能执行的 JavaScript。在那种情况下,我会得到这样的错误:

Javascript failed to execute (Capybara::Driver::Webkit::WebkitInvalidResponseError)
./features/step_definitions/....rb:19:in `/^I should not see any JavaScript errors$/'
features/....feature:34:in `Then I should not see any JavaScript errors'

有没有更好的办法?

最佳答案

是的,您可以使用 page.driver.console_messages 访问所有控制台消息,或者使用 page.driver.error_messages 访问错误消息。

为了测试没有 javascript 错误,我会建议一些东西:

Then /^I should see no Java\-Script errors$/ do
  page.driver.error_messages.length.should == 0
end

旁注:capybara-webkit 还包含一个匹配器 :have_errors 来编写一个漂亮的 page.should_not have_errors。不幸的是,这在当前版本中似乎已被破坏(至少对我而言;另请参阅:https://github.com/thoughtbot/capybara-webkit/pull/201)

关于javascript - 当页面上存在 JavaScript 错误时,如何使用 Capybara-Webkit 在功能测试中失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9207193/

相关文章:

javascript - 为什么 'this' 关键字不能用于使用参数的事件处理函数?

javascript - 模拟双击拖动结束 - jquery UI

php - 在上下文方法中访问 Behat 命令行选项或标志

css - 歧义匹配,找到 2 个匹配 css 的元素,如何获取第二个?

javascript - 使用 JavaScript 在 MongoDB 中返回 _id 的脚本

javascript - AngularJS $http.get() 在 Chrome 中最多需要 10-20 秒,在 Firefox 中运行良好

javascript - 类型错误 : Cannot read property 'args' when creating spy with Jasmine

javascript - 与 Jasmine 内置的 Spys 相比,使用 Sinon.js 有什么优势?

ruby-on-rails - 为什么 database_cleaner 破坏了我的测试(minitest/capybara/factory girl)?

selenium - 如何阻止 capybara / Selenium Chrome 窗口出现在前面/焦点?