如何使用延迟加载器捕获 Capybara Feature JS 测试中的服务器端错误?

Nic*_*rer 5 ruby rspec ruby-on-rails capybara selenium-chromedriver

版本:

  • 导轨 5.0.2
  • 规范 3.5.0
  • rspec-rails 3.5.1
  • capybara 2.12.1(带有用于 JS 测试的 chromedriver/selenium)
  • 红宝石 2.3.3
  • gitlab-ci

过去(和期望)的行为

当我在功能测试中遇到错误时,堆栈跟踪和错误将存储在我的机器和我们的 CI 的控制台上的结果中。

IE undefined method '#dance' for nilClass at line 36 of app/models/dancer.rb

当前行为

我们最近更新了代码库,以对特定数据表和特定视图使用“延迟加载”(或服务器端加载)。这意味着在 JS/功能测试中,如果视图中的某些内容没有正确加载,而不是呈现错误,我们只是有一个永不停止旋转的微调器和超时错误(或找不到的东西)。

现在,如果我正在使用 Rails 服务器处理开发中的页面,并且延迟加载器的 POST 请求失败,我可以直接跳到我的终端并检查堆栈跟踪和发生了什么。

如何更新我的 Rspec/Capybara 测试以使其更加详细,并且当这些服务器端错误发生在延迟加载器请求上时,实际上将其解决为过去的测试失败情况?

真诚地感谢您可以提供的任何帮助,并且非常乐意跟进您可能需要的任何其他信息。

Tho*_*ole 0

如果服务器中出现错误,请确保测试环境中没有安装任何可以捕获错误并显示漂亮页面(网络控制台、更好的错误等)的 gem,并确保Capybara.raise_server_errors = true(这是默认值,因此请确保您没有将其设置为 false)。使用该配置,Capybara 尝试发送到驱动程序的下一个命令应该会导致 Capybara 引发错误。如果错误被某些东西(比如上面提到的 gem)捕获并刚刚记录下来,那么水豚就无法知道它。