在我的Rails应用程序中,我制作了一个AJAX PUT请求(使用Coffeescript),该请求在我的开发环境中正常工作。当我检查按钮,点击后,会触发使用Firefox的AJAX请求时,它看起来是这样的:为什么我的AJAX在运行测试时请求dev中的PUT请求,但请求了GET请求?
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进行测试。
+0
你的代码是如何改变的?第一个示例代码与第二个代码不同!你也可以发布网络标签请求和响应? –
+0
@ dm03514我使用'$ .ajax替换了'$ .get(url,{分钟:分钟,appt_id:appt_id})'',''PUT', data:{minutes:minutes, appt_id:appt_id} })'并将我的路由从'get'send_more_minutes_message''改为'put'send_more_minutes_message''。 –
+0
您是否预先编译过测试环境中的资产?如果是这样,它有时可以阻止检测JS的变化,所以它继续使用旧版本 –