繁体   English   中英

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

[英]How do I fail a step in a feature test with Capybara-Webkit when there is a JavaScript error on a page?

我使用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还包括一个matcher :have_errors来编写一个很好的page.should_not have_errors 不幸的是,这似乎在当前版本中被破坏了(至少对我而言;另见: https//github.com/thoughtbot/capybara-webkit/pull/201

capybara-webkit似乎总是在我们的环境中有两条虚假的消息。 我试图尽可能具体,并过滤掉这些,但以下是我们在使用capybara-webkit检测到javascript错误时自动失败:

AfterStep do
  if webkit?
    real_error_messages = []
    page.driver.error_messages.each_with_index do |e, i|
      # first two messages appear to be bogus, always.
      if (e[:line_number] == 0) && (e[:source].eql? 'undefined') && (e[:message].eql? 'TypeError: \'null\' is not an object') && i <= 1
        # discard message
      else
        real_error_messages << e
      end
    end

    raise "Javascript errors: #{real_error_messages}" if real_error_messages.length > 0
  end
end

webkit?在哪里webkit? 是:

def webkit?()
  [:webkit, :webkit_debug].include? Capybara.javascript_driver
end

这里充分要点

尽管收到JavaScript错误的通知有时可能会有所帮助,但您应该尝试测试实际的JavaScript行为。 如果存在JavaScript错误,则应将其自身表现为失败方案。

您在每个步骤上运行的最佳方式是“向我显示页面”并检查您的Web控制台。 然后,您可以在您的代码中放置console.log。 您为所选步骤执行操作的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM