【发布时间】:2012-10-23 15:01:27
【问题描述】:
在我的规范中,当我运行下面的 POST 请求时,一切正常。
before do
request_payload = {
player: {
first_name: "Joe",
last_name: "Carradine",
team_id: "1"
}
}
post :create, request_payload
end
但是当我运行 PUT 规范时:
before do
request_payload = {
player: {
first_name: "Buck",
last_name: "Carradine",
team_id: "1"
}
}
put :update, { id: 3 }, request_payload
end
我收到这样的错误:
Failure/Error: put :update, { id: 1 }, request_payload
NoMethodError:
undefined method `[]' for nil:NilClass
我不知道什么被认为是 nil。此 API 调用在 REST 客户端中运行良好。
这是基于上一个 SO 问题的另一个错误:Receiving error in RSpec for PUT, but not POST
【问题讨论】:
-
如果你这样做:
put :update, { id: 3 }.merge(request_payload) -
这行得通(谢谢,您可以添加作为答案吗?),但是鉴于 id 哈希表示来自 URL 而不是来自有效负载的值,这种技术是一个很好的测试吗?
-
实际上,通过表单传递的每一个数据都可以通过参数获得,所以你不会在那里作弊。
标签: ruby-on-rails api rest rspec tdd