与Rspec,Capybara和phantom.js不一致的错误

时间:2014-08-14 18:49:01

标签: ruby-on-rails angularjs rspec capybara phantomjs

我有一个非常基本的测试,有时可以工作,有时会因为错误信息不一致而失败,例如:

Failure/Error: Unable to find matching line from backtrace
     AbstractController::ActionNotFound:
      The action 'location_states' could not be found for LocationController

或者:

Failure/Error: select 'Nationwide', from: 'location_type'
     Capybara::ElementNotFound:
       Unable to find option "Nationwide"

或者:

 Failure/Error: Unable to find matching line from backtrace
     RuntimeError:
       Circular dependency detected while autoloading constant LocationOptions

调用location_states初始化location_type下拉列表的AJAX回调是在Angular范围内,因此我想知道这是否存在这种不一致行为的原因。我尝试将Capybara.default_wait_time增加到10,但这似乎没有改变任何东西。

似乎导致所有这一切的特定行:

select 'Nationwide', from: 'location_type'

因为Capybara的选择最终依赖于find,我认为我不会遇到同步问题,但我想我在这里遗漏了一些东西。

我通过poltergeist使用phantom.js驱动程序。

1 个答案:

答案 0 :(得分:0)

我使用rspec,capybara和poltergeist遇到了类似的问题。 Capybara报告它无法找到页面上明显的元素。我使用save_and_open_page并验证它是否存在。当然,当我在“page.find(:css,'#element_id')”之前加上“sleep 5”语句时,那么测试就会通过。