ruby-on-rails-3 - 从 Rspec 文件运行的代码与从模型运行时的行为不同

标签 ruby-on-rails-3 testing rspec amazon-s3

几个小时以来,我一直在围绕这个问题转来转去,但没有找到对这个问题的引用......

我们正在为存储在 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/

相关文章:

ruby-on-rails - 单个规范在单独运行时通过,但在所有规范运行时失败

ruby-on-rails - 使用 Capybara(Rails、RSpec、Devise)测试注册和登录

ruby-on-rails-3 - 如何在 rails 3 中使用 Facebooker2 对 valid_session 进行 rspec ?

java - 排除Spring boot测试中的Configuration

ruby-on-rails - Minitest——如何查看失败的测试

javascript - 使用 Jasmine Specs 比较对象

ruby-on-rails-3 - 在 Rails 3 中使用 RSpec 测试嵌套属性上的 _destroy 属性

ruby-on-rails-3 - Neo4j ActiveRecord 支持使用 Ruby 作为解释器

ruby - 在 Chef 中执行 "chmod +x"的最佳方法是什么

ruby-on-rails - 如何使用rspec规范装饰器。