为什么在使用 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。