我有以下创建方法。
def create
User.transaction do
@u = User.create(user_params)
@u.create_role!(account_params)
@u.create_address!(address_params)
end
if params.has_key?("manager_id") then
if Manager.exists?(params["sam_id"]) then
@u.update(manager_id: params["manager_id"])
else
raise ActiveRecord::RecordNotFound, "The Mananger with id #{params["manager_id"]} does not exist"
end
end
res = @u.attributes.except("created_at","updated_at").merge(
@u.address.attributes.except("updated_at","created_at")
){|key,v1,v2|v1}
render json: res.to_json, status: :created
end
如果未满足角色和地址的某些验证,则返回的http状态为201
或404
。在我的rspec测试中,我用
it "returns status - 201 " do
expect(response).to have_http_status(201)
end
但我总是收到这条失败的消息
12) Api::V1::UserController POST #create Success returns status - 201
Failure/Error: expect(response).to have_http_status(201)
expected the response to have status code 201 but it was 200
# ./spec/controllers/api/v1/user_controller_spec.rb:126:in `block (4 levels) in <top (required)>'
POST请求的其他测试通过。因此,例如刚刚创建的用户的返回模式的匹配器成功运行。我不明白为什么我的测试总是返回200 ok
而不是201
答案 0 :(得分:0)
您需要先执行请求,然后再等待状态码。
如果尚未执行请求,response.status_code
将返回200。