为什么我的 AJAX 在开发中请求 PUT 请求,而在 运行 测试时请求 GET 请求?

Why is my AJAX request a PUT request in dev but a GET request when running tests?

在我的 rails 应用程序中,我发出了一个 AJAX PUT 请求(使用 Coffeescript),它在我的开发环境中正常工作。当我检查按钮时,单击该按钮会使用 Firefox 触发 AJAX 请求,它看起来像这样:

return $.ajax({
    url: url,
    type: 'PUT',
    data: {
      minutes: minutes,
      appt_id: appt_id
    }
});

但是,当我 运行 一个点击同一个按钮的集成测试并且我在 Firefox 中检查按钮时(我使用 byebug 在中间停止了测试),AJAX 请求看起来像这个:

return $.get(url, {
    minutes: minutes,
    appt_id: appt_id
  });

我刚刚将请求从使用 GET 更改为使用 PUT(当我手动测试时它有效),并且在使用 GET 时测试通过了,但是在将其更改为使用 PUT 后,测试失败并显示以下内容错误:

1.2) Failure/Error: raise ActionController::RoutingError, "No route matches [#{env['REQUEST_METHOD']}] #{env['PATH_INFO'].inspect}"

          ActionController::RoutingError:
            No route matches [GET] "/appointments/9998/put_away"

为什么测试环境中的 AJAX 请求从 PUT 请求更改为 GET 请求,我该如何解决这个问题以便我的测试通过?谢谢!

我正在使用 Rails 4.2.0、Ruby 2.2.4p230 和 RSpec 3.4.4,以及用于测试的 Selenium 和 Capybara。

如果您预编译您的资产,您可能在 public/assets 中有一个清单文件——可能是 .sprockets-manifest*.json。该文件的存在可以防止测试环境检测到您资产中的更改,因此无法在测试中提供最新的 JS。删除清单文件应该会强制在您下次 运行 测试时识别并提供更改。