2011-05-18 62 views
1

我一直在轉圈本作的幾個小時,沒有任何運氣找到一個解決問題的參考運行時比...代碼行爲不同從模型

我們正在建設一個存儲在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

我認爲你正在迴歸。嘗試爲不同的返回值添加一行。

def objNames 
    a = [] 
    bucket.objects.each do |i| 
    a << i.key 
    end 
    a 
end 
+0

啊,我有一種感覺,這是一件簡單的事情,那是做的,謝謝! – Tonys 2011-05-18 12:20:08