我正在尝试从我的API测试某些PUT / PATCH端点,但是我的'record_to_update'并没有达到预期的水平。
我使用Rails 5.2和RSpec 3.8组织规范如下:
require 'rails_helper'
RSpec.describe UsersController, type: :controller do
context 'when request with no valid headers' do
...
...
...
end
context 'when resquest with valid headers' do
before do
request.accept = 'application/vnd.api+json'
request.content_type = 'application/vnd.api+json'
2.times do
create(:user)
end
end
describe 'PATCH/PUT /users/:id' do
let(:record_to_update) { create(:user) }
let(:user_params) do
{ id: first_user.id, name: 'goku', email: 'goku@bol.com' }
end
before do
put :update, params: { id: record_to_update, user: user_params }
record_to_update.reload
end
it 'should update user' do
expect(record_to_update.name).to eq('goku')
expect(response.status).to eq 200
end
end
end
end
正如我在这里所说的,我面临的问题是'record_to_update'没有跟踪。我已经在与Postman相同的API中测试了相同的PUT / PATCH端点,并从那里成功进行了更新。我在这里做什么错了?
谢谢。
答案 0 :(得分:2)
您应将before
块移至it 'should update user'
before do
put :update, params: { id: record_to_update.id, user: user_params }
end
所以它变成了
it 'update user' do
put :update, params: { id: record_to_update, user: user_params }
expect ...
record.reload!
....
end