【问题标题】:XHR request from previous Capybara js spec surfacing (and failing) in next spec来自先前 Capybara js 规范的 XHR 请求在下一个规范中浮出水面(并且失败)
【发布时间】:2017-11-15 09:08:01
【问题描述】:

我们正在使用 Chrome 无头与 Capybara 和 Selenium 进行三个 js 功能测试。

当一个特定的 js 测试(使用 xhr)跟随另一个也使用 xhr 的特定 js 测试(参见 https://github.com/thredded/thredded/tree/separate-out-js-from-non-js-in-ci 获取代码或 https://travis-ci.org/thredded/thredded/jobs/302376004 获取示例运行)时,我们遇到了可预测的(仅在 CI 上)失败。

服务器错误总是出现在下一个规范“用户创建带有标题和内容的新主题”中,但 url 显然来自上一个规范“用户回复主题开始引用回复(js)”。

显而易见的是,在超出规范末尾的请求和在DatabaseCleaner.clean 之后发生的请求之间存在竞争条件。但是,我的理解是 Capybara 2.7+ [1] after_each 应该在 reset_session! 之后发生,这应该可以防止这个精确的问题。无论如何,我很确定页面中没有任何内容可以创建此请求(我们有一个特定的wait/test for the completion of this ajax request)。

这发生在 3 个不同的数据库和 3 个不同的 rails 版本(4.2、5.0、5.1)上。 我们已经升级到最新的 Capybara。

已尝试禁用 turbolink,在违规规范结束时添加大量 (10 秒) 睡眠...也尝试过手动重置会话。

一定是遗漏了什么。有什么指点吗?

[1] https://github.com/teamcapybara/capybara/pull/1637 引用自 https://bibwild.wordpress.com/2016/02/18/struggling-towards-reliable-capybara-javascript-testing/

更新:添加了对 xhr 的引用,因为另一个(新)js 规范存在问题,并且它不是出现错误的前两个请求(登录表单和登录后),而是第一个显示错误的 xhr 请求。在新情况下,在后续规范中使用 POST 请求被请求的 xhr,即使它最初是使用 GET 请求的

【问题讨论】:

    标签: javascript ruby-on-rails capybara selenium-chromedriver


    【解决方案1】:

    看起来这是一个 chromedriver 错误。

    我们通过将 chromedriver(在 travis 上)升级到 v2.33(linux)来解决此问题。 https://travis-ci.org/thredded/thredded/builds/302431113

    之前的版本是 v2.31。奇怪的是,我们无法使用 2.31 (mac) 在本地破解它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-16
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      相关资源
      最近更新 更多