如何解决在所有请求之前运行的 RSwag RSpec 测试中执行数据库设置部分
我正在为我的 API 实现 rswag。在运行任何示例(GET、POST)之前,需要完成一部分设置。这就是基本设置。但是,对于每个请求(GET、POST 等),可能需要在初始设置之后完成其他设置,因为它会继续处理这些记录。
我习惯于编写集成测试(类型::feature),其中在背景之后我会设置对所有场景都有效的数据库,并且如果需要,每个场景都可以在数据库中添加更多记录。
下面是一个简化的例子。 before(:all) 部分在创建 @speech 的部分之后运行,这会导致由于 @device 不存在而无法创建语音。
require 'swagger_helper'
RSpec.describe 'api/speech',type: :request do
before(:all) do
@organisation = create(:organisation,:with_departments,organisation_type: 'care_home')
@device = @organisation.devices.first
end
path '/api/v1/speech/{uuid}' do
get 'Get speech details' do
security [ Bearer: { scopes: ['speech'] } ]
parameter name: :uuid,in: :path,type: :string
response "200","Get details of a speech event" do
authenticate_oauth([:speech])
@speech = Speech::SpokenAnnouncement.create(message: Faker::Lorem.sentence(word_count: 5),destinations: [@device.id])
let(:uuid) { @speech.uuid }
run_test!
end
end
end
path '/api/v1/speech' do
post 'Speak a sentence' do
security [ Bearer: { scopes: ['speech'] } ]
parameter name: :speech,in: :body,schema: {
type: :object,properties: {
message: { type: :string },destinations: { type: :array,items: { type: :integer,nullable: false } }
}
}
response "200","Successfully added speech event" do
authenticate_oauth([:speech])
let(:speech) { {'message': 'This is a spoken message.','destinations' => [@device.id] } }
run_test! do |response|
expect(Speech::SpokenAnnouncement.count).to eq(1)
end
end
end
end
end
所以我的问题是:如何在每个请求(GET、POST 等)之前运行设置部分,以便我可以为每个请求定义更多设置。
希望这很清楚。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。