1

我的 Rails 应用程序当前有一个缩略图上传端点,由于 30 秒的请求限制,该端点经常在 Heroku 上超时。我使用Carrierwave并希望切换到CarrierWaveDirect,通过直接上传到 S3 来解决问题。

在此之前,我想编写一个回归测试并看到它因请求超时而失败。我怎样才能做到这一点?

我的大多数测试都是高级 Selenium/capybara 测试,所以我尝试编写一个存根控制器操作以始终引发超时错误的测试:

# Simulates 30 second Heroku timeout for thumbnail uploads.
context 'when PATCH requests timeout' do
  before do
    allow_any_instance_of(Api::V1::VideosController).to receive(:update).and_wrap_original do |m, *args|
      if request.content_type == 'multipart/form-data'
        raise Net::HTTPRequestTimeOut
      else
        m.call(*args)
      end
    end
  end

  it 'uploads custom thumbnails direct to S3' do
    signup_and_verify_email(signup_intent: :seller)
    visit_store_via_upload_link
    upload_test_video
    upload_thumbnail
  end
end

这失败了,因为request在块的上下文中未定义。在我进一步讨论之前,为这种情况编写测试的最佳方法是什么?

4

0 回答 0