【发布时间】:2020-09-01 15:20:50
【问题描述】:
我的 RSpec 有问题,我的 request_spec /post 不断给我输出:
1) Users POST /users valid user creates user properly
Failure/Error: expect(json['title']).to eq("example@email.com")
expected: "example@email.com"
got: nil
(compared using ==)
# ./spec/requests/users_request_spec.rb:54:in `block (4 levels) in <main>'
2) Users POST /users valid user have http status 201
Failure/Error: expect(response).to have_http_status(201)
expected the response to have status code 201 but it was 422
# ./spec/requests/users_request_spec.rb:59:in `block (4 levels) in <main>'
3) Users POST /users invalid user return failure message
Failure/Error: @user = User.create!(user_params)
ActiveRecord::RecordInvalid:
Validation failed: Password can't be blank, Password is too short (minimum is 5 characters), Email can't be blank, Email is invalid, Email has already been taken, Password confirmation can't be blank
我的规格是:
describe 'POST /users' do
let(:valid_params) { { email: 'example@email.com', password: '12345678', password_confirmation: '12345678', name: 'Derek' } }
context 'valid user ' do
before { post "/users", params: valid_params }
it 'creates user properly' do
puts user.errors.size
expect(json['title']).to eq("example@email.com")
expect(json).not_to be_empty
end
it 'have http status 201' do
expect(response).to have_http_status(201)
end
end
context 'invalid user ' do
before { post "/users", params: { } }
it 'return failure message' do
expect(response.body).to match(/Email can't be blanc/)
end
end
end
和控制器:
def create
# @user.id = current_user.id
@user = User.create!(user_params)
respond_to do |format|
if @user.save
format.json { render json: @user, status: :created }
else
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
我认为这是用户参数的问题:
def user_params
params.permit(:email, :password, :password_confirmation, :name)
end
我添加了 require(:user) 到它,但后来我收到错误“参数丢失或值为空用户”。我受不了了,请帮帮我。
【问题讨论】:
-
根据您的表单外观,参数如下所示:
params = { user: { name: "Derek, email: "..." } }。因此,例如,如果您使用 form_for 。检查你的rails s的日志,你会看到它是否嵌套。 -
提交的数据和预期的数据也可能不匹配:您提交了
email字段,但您的测试正在寻找title字段。 -
其实我用的是api_only,所以我跳过了所有视图
标签: ruby-on-rails ruby rspec