Функциональный тестовый пример Rails и загрузка файлов в ActionDispatch :: Http :: UploadFile

Я нахожу эту технику интересной при работе с linqxml:

public bool GetFooSetting(XElement ndef){
   return (bool?)ndef.Element("MyBoolSettingValue") ?? true;
}

в противоположность:

public bool GetFooSetting(XElement ndef){
   return ndef.Element("MyBoolSettingValue") != null ? bool.Parse(ndef.Element("MyBoolSettingValue") ) : true;
}
16
задан Kevin Sylvestre 5 January 2011 в 07:00
поделиться

3 ответа

Я использую камень s3 вместо камня aws / s3. Основными причинами этого являются отсутствие поддержки европейских сегментов, и разработка aws / s3, похоже, остановлена.

Если вы хотите проверить загрузку файла, чем корректно использование метода fixtures_file_upload , он отображается непосредственно на Rack :: Test :: UploadedFile.new (вы можете использовать это, если тестовый файл не находится в папке fixtures).

Но я также заметил, что поведение объектов файлов Rack :: Test :: Uploaded отличается от поведения объекта ActionDispatch :: Http :: UploadedFile (это класс загружаемых файлов). Основные методы (имя_файла_файла, чтение, размер, ...) все работают, но есть некоторые различия при работе с файловым методом. Поэтому ограничьте свой контроллер этими методами, и все будет хорошо.

Другое возможное решение - создать объект файла ActionDispatch :: Http :: Uploaded и использовать его так:

upload = ActionDispatch::Http::UploadedFile.new({
  :filename => 'avatar.jpeg',
  :content_type => 'image/jpeg',
  :tempfile => File.new("#{Rails.root}/test/fixtures/avatar.jpeg")
})

post :create, :person => { :avatar => upload }
56
ответ дан 30 November 2019 в 15:25
поделиться

Я бы порекомендовал использовать насмешки. Быстрый поиск в Google показывает:

http://www.ibm.com/developerworks/web/library/wa-mockrails/index.html

Вы должны быть возможность создать объект, который будет реагировать на поведение, которое вы хотите. В основном используется в среде модульных тестов, поэтому вы можете тестировать свои вещи изолированно, поскольку интеграционные тесты должны полностью использовать весь стек. Тем не менее, я вижу, что в этом случае было бы полезно смоделировать сервис S3, потому что он стоит денег.

0
ответ дан 30 November 2019 в 15:25
поделиться

Я не знаком с гемом AWS / S3, но кажется, что вы, вероятно, неправильно используете параметр: avatar. bytesize определено на String в ruby1.9. Что произойдет, если вы позвоните по номеру read в загруженном файле и передадите его в AWS / S3?

0
ответ дан 30 November 2019 в 15:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: