Rails api POST测试不允许我访问json对象

问题描述 投票:0回答:1

我花了很长时间试图弄清楚我的Users控制器的POST行为在哪里弄乱了,我没有主意。

在命令行中输入json后,我一直从绑定撬回错误:

{"message"=>"Couldn't find User without an ID"}

这很奇怪,因为我只是在创建一个新用户。控制器user_params与我在测试环境中创建的valid_attribute有效负载匹配。

删除binding.pry,我收到此错误:

 1) Users API POST /users when the request is valid creates a user
     Failure/Error: expect(json['username']).to eq('Tychus')

       expected: "Tychus"
            got: nil

       (compared using ==)

我最初的GET测试似乎可以正常工作,所以我不确定为什么我的POST会出错。

任何帮助将不胜感激。

spec / requests / users_spec.rb

  # Test suite for POST /users
  describe 'POST /users' do
    # valid payload
    let(:valid_attributes) { { username: 'Tychus', password: 'password1' } }

    context 'when the request is valid' do
      before { post '/users', params: valid_attributes }

      it 'creates a user' do
        binding.pry
        expect(json['username']).to eq('Tychus')
        expect(json['password']).to eq('password1')
      end

      xit 'returns a status code of 201' do
        expect(response).to have_http_status(201)
      end
    end
  end

controllers / users_controller.rb

class UsersController < ApplicationController
  before_action :set_user, only: [:show, :create, :destroy]

  # GET /users/:id
  def show
    json_response(@user)
  end

  # POST /users
  def create
    @user = User.create!(user_params)
    binding.pry
    json_response(@user, :created)
  end

  private
  def user_params
    params.permit(:username, :password)
  end

  def set_user
    @user = User.find(params[:id])
  end
end
ruby-on-rails factory-bot
1个回答
0
投票

问题是set_user私有方法,它试图寻找id。从:create中删除before_action解决了此问题。

© www.soinside.com 2019 - 2024. All rights reserved.