Я уже несколько часов вращаюсь вокруг этого, и мне не повезло найти ссылку на проблему ...
Мы создаем простое приложение для индексирования видео библиотеки, хранящейся на AmazonS3.При написании теста я сначала записываю все в тестовый файл, чтобы определить, какие результаты мне нужны, и постепенно перемещаю реальную реализацию в модель.
Работа с Rails 3, гемом AWS-S3 иRspec Итак, в моем тесте я начинаю со следующего кода:
spec/models/s3import_spec.rb
...
it "gets the names of all objects" do
im = S3import.new
a = []
im.bucket.objects.each do |obj|
a << obj.key
end
a.should == ["Agility/", "Agility/Stationary_Over Stick/",
"Agility/Stationary_Over Stick/2 foot hops over stick.mp4"]
end
Этот простой тест создает объект импорта, который знает имя и учетные данные корзины S3, проходит через объекты в корзине и захватываетимя объекта.Это работает, как и ожидалось.
Когда я перемещаю код в модель, я получаю следующую модель:
app/models/s3import.rb
...
def objNames
a = []
bucket.objects.each do |i|
a << i.key
end
end
, и тест меняется на следующее:
it "gets the names of all objects" do
im = S3import.new
a = im.objNames
a.should == ["Agility/", "Agility/Stationary_Over Stick/",
"Agility/Stationary_Over Stick/2 foot hops over stick.mp4"]
end
Моя путаница заключается в том, что когда я запускаю тест, вызывающий код на стороне модели, я не получаю ожидаемый массив строк (как я получил в автономном тестовом коде).Я получаю следующее:
[#<AWS::S3::S3Object:0x2179225400 '/transcode2011/Agility/'>,
+ #<AWS::S3::S3Object:0x2179225380 '/transcode2011/Agility/Stationary_Over Stick/'>,
+ #<AWS::S3::S3Object:0x2179225320 '/transcode2011/Agility/Stationary_Over Stick/2 foot hops over stick.mp4']
Как видите, возвращаемый массив состоит из оригинального AWS :: S3: S3Objects ... Как будто цикл просто дублирует исходный массив, а не получает ключ ''как строка.
Я протестировал то же самое в консоли, и я не могу понять, что конкретно отличается, что вызывает расхождение.
Любая помощь будет принята с благодарностью.