我的rails-app包含使用Capybara poltergeist(使用phantomjs)的rspec测试。前端是Backbone.js。有时会通过某些测试,有时则不会。调试显示在检查时未加载正确的内容。如果我添加一个延迟,电子邮件。睡觉(inspection_time = 1),然后测试通过。
describe 'Direct visit page / # / desk / page / [ID]' do
before {sign_in user}
it 'should contain page title' do
visit "/#/desk/pages/#{page.id}"
#sleep (inspection_time = 1)
expect (page) .to have_css (". page-detail p.title",: text => page.title)
end
end
执行js-tests并且这么长,但不可靠的延迟会增加执行时间。是否有一个很好的解决方案的司机恶作剧(宝石' poltergeist',' 1.6.0')?
可能值得抛弃顽固主义者,例如capybara-webkit?
答案 0 :(得分:2)
使用capybara测试异步请求可能会非常棘手。你注意到capybara不知道等待异步请求完成。但好消息是,匹配者足够聪明,可以等待某些事情出现。
例如,如果你打电话
expect(page).to have_css(".new_data")
并且最初不存在具有new_data类的div,capybara将等待X秒(在配置中定义)以查看它是否出现。然而,这有时是不够的,你可能正在处理某种竞争条件。 Thoughtbot写了一篇关于如何解决这个问题的好article。