Я загружаю изображение в свою модель Imagecollection с использованием CarrierWave и хочу проверить, что когда я загружаю изображение, оно действительно доступно в Интернете.И что, когда я удаляю изображение, оно на самом деле удаляется.
Я использую бэкэнд S3, поэтому я хотел бы проверить это в самой модели, без необходимости иметь какие-либо зависимости контроллера, или запуститьинтеграционные тесты.Поэтому мне нужно создать URL-адрес, выполнить запрос HTTP и проверить его код возврата.Этот код не работает, но есть способ сделать что-то похожее на следующее:
describe "once uploaded" do
subject {Factory :company_with_images}
it "should be accessible from a URL" do
image_url = subject.images.first.image.url
get image_url # Doesn't work
response.should be_success # Doesn't work
end
end
РЕДАКТИРОВАТЬ:
Я закончил тем, что добавил это в свойGemfile
gem rest-client
И использующий: fog для своих тестов.В идеале я мог бы изменить бэкэнд во время теста на что-то вроде
before do
CarrierWave.configure do |config|
config.storage = :fog
end
end
describe tests
end
after do
CarrierWave.configure do |config|
config.storage = :end
end
end
Но это, похоже, на самом деле ничего не делает.
describe "once uploaded" do
describe "using the :fog backend" do
subject {Factory :company_with_images}
# This test only passes beecause the S3 host is specified in the url.
# When using CarrierWave :file storage, the host isn't specified and it
# fails
it "should be accessible from a URL" do
image_url = subject.images.first.image.url
response = RestClient.get image_url
response.code.should eq(200)
end
end
describe "using the :file backend" do
subject {Factory :company_with_images}
# This test fails because the host isn't specified in the url
it "should be accessible from a URL" do
image_url = subject.images.first.image.url
response = RestClient.get image_url
response.code.should eq(200)
end
end
end