Выполнение кода из файла Rspec ведет себя иначе, чем при запуске из модели - PullRequest
1 голос
/ 18 мая 2011

Я уже несколько часов вращаюсь вокруг этого, и мне не повезло найти ссылку на проблему ...

Мы создаем простое приложение для индексирования видео библиотеки, хранящейся на 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 ... Как будто цикл просто дублирует исходный массив, а не получает ключ ''как строка.

Я протестировал то же самое в консоли, и я не могу понять, что конкретно отличается, что вызывает расхождение.

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 18 мая 2011

Я думаю, что вы возвращаете ведро.Попробуйте добавить строку для другого возвращаемого значения.

def objNames
  a = []
  bucket.objects.each do |i|
    a << i.key
  end
  a
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...