【发布时间】:2022-11-15 09:56:47
【问题描述】:
我正在尝试针对新创建的记录的帐户编写一些 ActiveRecord 验证的 Rswag 测试。
我遇到的问题是我不知道如何使用 FactoryBot 创建一个帐户,然后在测试运行时它仍然存在。由于模型验证使用数据库层来获取记录,因此它仍需要在 FactoryBot 创建记录的上下文中。
我无法在测试外定义模型,也无法在测试内修改参数。
可以解决这个问题的一件事是,如果有一种方法可以在不使用 let 的情况下从测试内部修改参数。但我在文档中找不到任何相关信息。
有没有其他人遇到过这个问题并找到了解决方案?我觉得我不能成为唯一一个尝试以这种方式编写测试的人。
我试过这种方式(简化代码):
parameter name: :account_id, in: :query, type: :integer
response(422, 'account not permitted') do
account = FactoryBot.create(:account, forbidden: true)
let(:account_id) { account.id }
run_test!
end
这正确地将参数设置为新创建的帐户的 ID,但是当验证代码在模型类中运行时,就 ActiveRecord 而言,帐户不存在,我假设是因为它不是在“内部”创建的测试。
我也试过这种方式:
parameter name: :account_id, in: :query, type: :integer
response(422, 'account not permitted') do
before do
account = FactoryBot.create(:account, forbidden: true)
let(:account_id) { account.id }
end
run_test!
end
这种方式失败了,因为您不能从 before 块内部调用 let。不确定为什么要阻止这种情况,但我确定这是有充分理由的。
【问题讨论】:
标签: factory-bot rswag