我在我的应用程序中使用数据表,并且记录由ajax加载到表中。现在我正在为我的数据表的页面编写测试,并且必须等待直到记录被加载。我配置了capybara webkit,并在我的测试中放入了js:true。但是当我运行测试我得到这个错误水豚webkit忽略ActionController :: RoutingError
Failure/Error: raise ActionController::RoutingError, "No route matches [#{env['REQUEST_METHOD']}] #{env['PATH_INFO'].inspect}"
ActionController::RoutingError:
No route matches [GET] "/images/sort_both.png"
在我的浏览器我检查了控制台,我没有得到这个错误,所有图像都发现。
这是我的WebKit的配置
Capybara.javascript_driver = :webkit
Capybara::Webkit.configure do |config|
config.raise_javascript_errors = false
end
我使用wait_for_ajax方法
def wait_for_ajax
Timeout.timeout(Capybara.default_max_wait_time) do
loop do
active = page.evaluate_script('jQuery.active')
break if active == 0
end
end
end
,这是我的测试
scenario 'check pending contributions', js: true do
login_as analyst, scope: :analyst
visit '/analyst/contributions'
wait_for_ajax
expect(page).to have_content "#{contribution.user_name}"
end
,现在我想解决这个路由错误,或者只是忽略它,因为我只是想测试逻辑,而不是js错误。
感谢您的答案,它解决了我的问题的ActionController :: RoutingError,但我的测试它不工作。我的表没有被填充/ capybara没有在测试中等待,所以它没有找到“#{contribution.user_name}”。但是,谢谢你的精确答案。 –
@MatheusMendes你的测试不工作是一个不同的问题,你可以尝试增加'Capybara.default_max_wait_time',以防止响应时间太长。更可能的是你没有创建要在测试中返回的记录(或者通过不做或者通过使用'let'来懒洋洋地创建'贡献',所以当你得到ajax结果时它实际上不在数据库中),或者您尚未禁用事务性测试并设置database_cleaner,因此记录在测试和应用程序线程中都可用。然而,这真的是一个单独的问题,从这一个 –
感谢您的回应@ thomas,我测试,记录是使用pry创建的,我使用let!它在开始时创建记录。我所有的其他测试都在工作,所以我认为我的事务性测试database_cleaner是可以的。将更多的细节发布另一个问题,谢谢。 –