Почему записи не сохраняются в БД при тестировании с видеомагнитофоном? - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть интерактор foo с методом perform, который выполняет вызов API и записывает ответ через ActiveRecord. Работает нормально. У меня есть spe c, который запускает метод с данными FactoryBot, а затем проверяет БД на ожидаемые записи. Это тоже отлично работает. Однако, когда я обертываю вызов в VCR.use_cassette, он выполняется (и создается созданная в результате кассета), но записи в БД, похоже, не записываются. Чего мне не хватает?

spe c выглядит так:

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. Без видеомагнитофона это.

1 Ответ

0 голосов
/ 30 апреля 2020

Любопытно, что с видеомагнитофоном все в порядке. Я хранил предметы с фиксированной временной меткой, а затем читал их с динамической c, которая не пересекалась. Полная пебка c.

...