为什么在使用 VCR 测试时记录没有存储到数据库中?
Why are records not being stored to the db when testing with VCR?
我有一个带有方法 perform
的交互器 foo
,它发出 API 调用,并通过 ActiveRecord 记录响应。它工作正常。我有一个规范可以触发带有 FactoryBot 数据的方法,然后检查数据库中的预期记录。这也很好用。但是,当我将调用包装在 VCR.use_cassette
中时,会进行调用(并创建结果盒),但似乎没有写入数据库记录。我错过了什么?
规格如下:
it 'should do a thing' do
bar = FactoryGirl.create(:bar)
VCR.use_cassette('foo/cassette') do
MyInteractor.perform(bar)
end
record = BarRecord.find_by(bar_id: bar.id)
expect(record.status.to_sym).to be(:success)
end
perform
方法大致如下所示:
def perform(bar)
uri = URI.parse("<url>")
req = Net::HTTP::Post.new(uri, 'Content-Type' => 'application/json')
req.basic_auth Settings.username, Settings.password
req['Accept'] = 'Application/json'
req.body = post_params.to_json
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
res = https.request(req)
record = BarRecord.new(bar_id: bar.id)
record.status = JSON.parse(res.body)["status"]
record.save!
record
end
BarRecord
应该通过调用 perform
创建。没有录像机就是这样。
出于好奇,VCR 实际上没有任何问题。我正在存储具有固定时间戳的项目,然后使用不重叠的动态时间读取它们。完整的pebkac。
我有一个带有方法 perform
的交互器 foo
,它发出 API 调用,并通过 ActiveRecord 记录响应。它工作正常。我有一个规范可以触发带有 FactoryBot 数据的方法,然后检查数据库中的预期记录。这也很好用。但是,当我将调用包装在 VCR.use_cassette
中时,会进行调用(并创建结果盒),但似乎没有写入数据库记录。我错过了什么?
规格如下:
it 'should do a thing' do
bar = FactoryGirl.create(:bar)
VCR.use_cassette('foo/cassette') do
MyInteractor.perform(bar)
end
record = BarRecord.find_by(bar_id: bar.id)
expect(record.status.to_sym).to be(:success)
end
perform
方法大致如下所示:
def perform(bar)
uri = URI.parse("<url>")
req = Net::HTTP::Post.new(uri, 'Content-Type' => 'application/json')
req.basic_auth Settings.username, Settings.password
req['Accept'] = 'Application/json'
req.body = post_params.to_json
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
res = https.request(req)
record = BarRecord.new(bar_id: bar.id)
record.status = JSON.parse(res.body)["status"]
record.save!
record
end
BarRecord
应该通过调用 perform
创建。没有录像机就是这样。
出于好奇,VCR 实际上没有任何问题。我正在存储具有固定时间戳的项目,然后使用不重叠的动态时间读取它们。完整的pebkac。