【发布时间】:2014-10-16 21:12:38
【问题描述】:
给定以下控制器:
class UsersController < ApplicationController
include ActionController::ImplicitRender
include ActionController::ParamsWrapper
wrap_parameters format: :json
# POST /users
# POST /users.json
def create
#@user = User.new(params[:user])
@user = User.new(user_params)
if @user.save
render json: @user, status: :created, location: @user
else
render json: @user.errors, status: :unprocessable_entity
end
end
private
def user_params
params.require(:user).permit(:name, :email)
end
end
我可以通过使用 CURL 发送 HTTP POST 请求来创建新用户:
curl -H "Content-Type: application/json" -d '{"name":"xyz","email":"xyz@example.com"}' http://myrailsapp.dev/users
我将如何相应地制定请求规范?
# spec/requests/users_spec.rb
describe "POST /users" do
it "should create a new user" do
# FILL ME IN
expect(response).to have_http_status(200)
end
end
我的第一个想法是添加以下内容:
post users_path, body: '{"name":"xyz","email":"xyz@example.com"}'
这会导致 HTTP 状态为 400。
【问题讨论】:
-
修复了它。如果你写它作为回复,我会接受它。
-
实际上,您的第一条评论(您遗憾地删除了)是有效的答案:` post users_path, user: {name: "Test", email: "xyz@example.com" }` 似乎无需传递 CONTENT_TYPE。
-
因为在那之后我发现了相同的问题,只是将其链接起来并将您的问题标记为重复。
标签: ruby-on-rails json http rspec