为什么我的 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。删除清单文件应该会强制在您下次 运行 测试时识别并提供更改。
在我的 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。删除清单文件应该会强制在您下次 运行 测试时识别并提供更改。