我正在使用 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/