水豚 webkit 忽略 ActionController::RoutingError
Capybara webkit ignore ActionController::RoutingError
我在我的应用程序中使用数据table,并且记录由 ajax 加载到 table。现在我正在为我的数据 table 页面编写测试,必须等到记录加载完毕。我配置了 capybara webkit 并将 js: true 放在我的测试中。但是当我 运行 测试时我得到这个错误
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 错误。
该错误不是 JS 错误,而是您的服务器在请求资产时引发的错误。您可能可以通过设置 Capybara.raise_server_errors = false
告诉您的测试忽略该错误,但更好的解决方案是修复您的资产管道,以便所有资产都能在测试环境中得到正确服务。很可能您之前已经在测试环境中预编译了资产,并且遗留的清单文件阻止它重新编译新添加的资产。您可以通过 运行 之类的
来解决这个问题
RAILS_ENV=test rake assets:clobber
此外,假设 #{contribution.user_name}
文本是通过 ajax 调用加载的,则不需要 wait_for_ajax
方法调用,因为 have_content
已经 wait/retry.
我在我的应用程序中使用数据table,并且记录由 ajax 加载到 table。现在我正在为我的数据 table 页面编写测试,必须等到记录加载完毕。我配置了 capybara webkit 并将 js: true 放在我的测试中。但是当我 运行 测试时我得到这个错误
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 错误。
该错误不是 JS 错误,而是您的服务器在请求资产时引发的错误。您可能可以通过设置 Capybara.raise_server_errors = false
告诉您的测试忽略该错误,但更好的解决方案是修复您的资产管道,以便所有资产都能在测试环境中得到正确服务。很可能您之前已经在测试环境中预编译了资产,并且遗留的清单文件阻止它重新编译新添加的资产。您可以通过 运行 之类的
RAILS_ENV=test rake assets:clobber
此外,假设 #{contribution.user_name}
文本是通过 ajax 调用加载的,则不需要 wait_for_ajax
方法调用,因为 have_content
已经 wait/retry.