У меня есть интерактор 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
. Без видеомагнитофона это.