我的 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
在块的上下文中未定义。在我进一步讨论之前,为这种情况编写测试的最佳方法是什么?