Capybara webkit忽略ActionController :: RoutingError

时间:2017-07-19 14:28:31

标签: ruby-on-rails rspec capybara capybara-webkit

我在我的应用程序中使用数据表,并且记录由ajax加载到表中。现在我正在为我的数据表的页面编写测试,并且必须等待直到加载记录。我配置了capybara webkit并在我的测试中输入了js:true。但是当我运行测试时,我得到了这个错误

float

在我的浏览器中,我检查了控制台,我没有收到此错误,所有图像都被找到。

这是我对webkit的配置

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"

我正在使用wait_for_ajax方法

Capybara.javascript_driver = :webkit

Capybara::Webkit.configure do |config|
  config.raise_javascript_errors = false
end

这是我的测试

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

现在我想解决这个路由错误,或者只是忽略它,因为我只想测试逻辑,而不是js错误。

1 个答案:

答案 0 :(得分:1)

该错误不是JS错误,它是您的服务器在请求资产时引发的错误。您可以通过设置Capybara.raise_server_errors = false告诉测试忽略错误,但更好的解决方案是修复资产管道,以便在测试环境中正确地提供所有资产。可能的情况是,您之前已在测试环境中预编译了资产,并且剩余的清单文件阻止它重新编译新添加的资产。您可以通过运行

之类的东西来解决这个问题
RAILS_ENV=test rake assets:clobber

此外,假设通过ajax调用加载#{contribution.user_name}文本,则不需要wait_for_ajax方法调用,因为have_content已经等待/重试。