【发布时间】:2019-03-19 02:26:31
【问题描述】:
我正在使用 Rails 编写一个接收 JSON 作为其参数的控制器,然后使用 Rspec 请求规范对其进行测试。
控制器:
class API::UserController < ApplicationController
def create
@user = User.new(user_params)
if @user.save
redirect_to @user
else
render json: { errors: @user.errors.full_messages }, status: :unprocessable_entity
end
private
def user_params
params.require(:user).permit(:username, :email, :name, :password_digest)
end
end
规格:
RSpec.describe "User creation", type: :request do
def create_user_request
params = { user: build(:user), format: :json }
post api_users_path, params: params.to_json
end
it 'should create a new user' do
expect { create_user_request }.to change { User.count }.by(1)
end
但这失败了:
Failure/Error: params.require(:user).permit(:username, :name, :email, :password_digest)
ActionController::ParameterMissing:
param is missing or the value is empty: user
我认为问题在于控制器中的params 是作为字符串的序列化 JSON 对象。如果我在规范中将params: params.to_json 替换为params: params,则user 参数将变为字符串"#<User:0x.....>"。
如何让规范和控制器配合得很好?
【问题讨论】:
标签: ruby-on-rails json