Ruby on rails Rails api后期测试不允许我访问json对象

Ruby on rails Rails api后期测试不允许我访问json对象,ruby-on-rails,factory-bot,Ruby On Rails,Factory Bot,我花了很长时间试图弄清楚我的用户控制器的帖子行为在哪里出了问题,我已经没有主意了 在命令行中键入json后,我从binding pry返回了错误: {“message”=>“找不到没有ID的用户”} 这很奇怪,因为我只是在创建一个新用户。控制器user_参数与在测试环境中创建的valid_属性有效负载匹配 移除绑定。撬动我收到此错误: 1) Users API POST /users when the request is valid creates a user Failure/E

我花了很长时间试图弄清楚我的用户控制器的帖子行为在哪里出了问题,我已经没有主意了

在命令行中键入json后,我从binding pry返回了错误:

{“message”=>“找不到没有ID的用户”}

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

移除绑定。撬动我收到此错误:

 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测试似乎是有效的,所以我不知道为什么我的帖子会出错

任何帮助都将不胜感激

spec/requests/users\u 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
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
控制器/用户\u controller.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
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
class UsersController
问题在于
设置用户
私有方法,它试图查找
id
。删除
:在执行操作之前从
中创建
修复了此问题