rspec / capybara / poltergeist测试在本地传递100%,随机测试在teamcity CI服务器上失败

时间:2013-08-13 18:29:09

标签: ruby-on-rails-3 rspec capybara teamcity rspec-rails

我有一堆rspec测试,其中大约30个是通过水豚/恶作剧的无头测试。每次我在本地运行测试时,所有100%的测试都通过了。

我最近建立了一个teamcity持续集成服务器,测试结果非常不一致。

我运行了10次测试,没有在测试之间做任何更改。只有1轮通过了100%。其他人有1-2次失败(大多数都不一样),都与无头浏览器测试有关。以下是其中一个失败的示例:

ActionView::Template::Error: Couldn't find Spree::Address with id=1072978592

Stack trace:
./app/models/spree/order_decorator.rb:50:in `initialize_default_address'
./app/models/spree/order_decorator.rb:42:in `initialize_shipment'
./app/views/layouts/core.html.erb:23:in `_8cb98e121af585621c1d08e3ec1f6022'
./app/views/layouts/default.html.erb:14:in `_588b3208edc213a939dffd2ad73f4f26'

这个失败很奇怪,因为我查找了一个寻找带ID的地址并返回一个工厂女模特的函数。我在本地没有这个问题。

以下是其中一个测试运行的另一个错误:

Capybara::ExpectationNotMet: expected to find link "10" but there were no matches

Stack trace:
./spec/features/simply_ship_spec.rb:102:in `block (2 levels) in <top (required)>'

同样,当我在本地运行时,这个错误不会发生,当我切换到selenium并观察测试时,链接显然就在那里。

这两个错误(不是全部,但有几个例子)在不同的运行中单独发生,而不对项目进行任何更新。有没有人知道为什么会这样?

rspec-rails 2.14.0 水豚2.1 恶作剧者1.3.0 轨道3.2.14 红宝石1.9.3 p448

3 个答案:

答案 0 :(得分:3)

您可以尝试capybara-screenshot gem在失败期间澄清页面状态。

答案 1 :(得分:2)

如果没有看到您的代码,很难说,但听起来您的代码中可能存在竞争条件。如果您的脚本运行速度比应用程序代码快,那么您偶尔会遇到类似的失败。

您可以查看这些故障发生的位置,并确保在继续之前抓住应用程序。

答案 2 :(得分:2)

事实证明,恶作剧中存在导致不可靠点击的错误。你可以在这里跟踪错误讨论:

https://github.com/teampoltergeist/poltergeist/issues/530