Rails 4.2 rspec - 期望http状态为201,但始终为200

时间:2016-08-26 09:29:27

标签: ruby-on-rails ruby-on-rails-4 rspec

我有以下创建方法。

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状态为201404。在我的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

1 个答案:

答案 0 :(得分:0)

您需要先执行请求,然后再等待状态码。

如果尚未执行请求,response.status_code将返回200。