Я нахожу эту технику интересной при работе с 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;
}
Я использую камень 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 }
Я бы порекомендовал использовать насмешки. Быстрый поиск в Google показывает:
http://www.ibm.com/developerworks/web/library/wa-mockrails/index.html
Вы должны быть возможность создать объект, который будет реагировать на поведение, которое вы хотите. В основном используется в среде модульных тестов, поэтому вы можете тестировать свои вещи изолированно, поскольку интеграционные тесты должны полностью использовать весь стек. Тем не менее, я вижу, что в этом случае было бы полезно смоделировать сервис S3, потому что он стоит денег.
Я не знаком с гемом AWS / S3, но кажется, что вы, вероятно, неправильно используете параметр: avatar. bytesize
определено на String
в ruby1.9. Что произойдет, если вы позвоните по номеру read
в загруженном файле и передадите его в AWS / S3?