【发布时间】: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