几个小时以来,我一直在围绕这个问题转来转去,但没有找到对这个问题的引用......
我们正在为存储在 AmazonS3 上的视频库构建一个简单的索引应用程序。 在编写测试时,我首先将所有内容写入测试文件以确定我想要的结果,然后逐步将实际实现移至模型。
使用 Rails 3、AWS-S3 gem 和 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 组成...就好像循环只是简单地复制了原始数组,而不是将“键”作为字符串获取。
我已经在控制台中进行了相同的测试,但我似乎无法弄清楚导致差异的具体不同之处。
如有任何帮助,我们将不胜感激。
最佳答案
我认为你正在归还水桶。尝试为不同的返回值添加一行。
def objNames
a = []
bucket.objects.each do |i|
a << i.key
end
a
end
关于ruby-on-rails-3 - 从 Rspec 文件运行的代码与从模型运行时的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6041704/