ruby-on-rails - 如何使用 RSpec 测试 PUT/PATCH API
问题描述
我正在尝试从我的 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 端点,并从那里成功更新。我在这里做错了什么?
提前致谢。
解决方案
您应该将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
推荐阅读
- xml - 使用斜体的 XSLT 恢复信息 XML
- javascript - 如何提交到谷歌表单而不重定向到它的页面
- css - 如何过渡已经有动画的 React 元素
- c - 如果在 main 中添加了元素,则在 C 中查找链表的元素有效,但如果没有,则无效?
- c# - 在 C# 中指定参数属性的默认值
- ios - 将数据从 tableViewCell 传递到另一个 VC
- javascript - 如何从作为道具传递的数组中反应性地删除一个对象,以便它反映在 DOM 中?
- regex - 正则表达式查找指定的值
- c - 为什么多次调用 calloc 会使我的应用程序崩溃?
- python - Termcolor“彩色”输出奇怪的字符