2010-02-10 54 views
5

這是我有:如何使用rspec模擬/僞造文件的存在?

it "should be able to get a valid directory path" do 
    @asset.some_file_path.should == "/something/test.jpg" 
end 

的問題是,some_file_path返回「/not_here_yet.jpg」如果沒有現有的文件。

def some_file_path 
    if File.exists(self.my_image_path) 
    return my_image_path 
    else 
    return "/not_here_yet.jpg 
    end 
end 

我真的不想在我的測試中創建一個新文件。有沒有辦法讓我僞造文件的存在?

我想東西的線路:

it "should be able to get a valid directory path" do 
    AwesomeFakeFileCreator.create(@asset.my_image_path) 
    @asset.some_file_path.should == "/something/test.jpg" 
end 

這可能嗎?我怎麼能做這樣的事情?

編輯:我查了一下,在FakeFS,但我不知道它回答我的問題

回答

6

你可以做的

it "should be able to get a valid directory path" do 
    File.stub!(:exists?).and_return(true) 
    @asset.stub!(:my_image_path).and_return("/something/test.jpg") 
    @asset.some_file_path.should == "/something/test.jpg" 
end 
+0

你可以詳細介紹一下這是做什麼? – marcgg 2010-02-10 11:10:03

+1

第一行列出文件存在返回true,第二行列出資產對象的my_image_path方法,並返回文件路徑,在這種情況下,即some_file_path方法將返回的文件路徑,即整個spec示例所涉及的文件路徑。總之,如果路徑存在,則返回該路徑。 – nas 2010-02-10 11:23:49

+0

不是說你必須讓我開心或什麼 - 我沒有問這個問題 - 但我擔心我不明白這一點。 – Shadowfirebird 2010-02-10 12:28:58

-2

線的東西,這可能是一個非常無益的答案,因爲我我只是在我自己的腦袋裏進行自動化測試,但是:

據我所知,你只需要測試兩個條件:文件存在,文件不存在?

測試不存在很簡單:創建一個不存在my_image_path的資產,並檢查該函數返回'/not_here_yet.jpg'。

當然,您可以用相同的方式測試另一個案例嗎?創建一個帶有.jpg擴展名的空文件,然後創建一個指向它的資產,並檢查該函數是否返回正確的名稱?

+0

我不想隨時創建文件。測試會更慢,我將不得不額外小心創建/刪除文件。 – marcgg 2010-02-10 13:01:45

+0

:)我確實說過這可能是一個無益的答案... – Shadowfirebird 2010-02-10 13:54:42

0

也許你可以僞造你的文件的正確路徑。假的每個文件,你想返回的路徑

it "should be able to get a valid directory path" do 
    File.stub!(:exists?).with("my_image_path.jpg").and_return("my_image_path.jpg") 
    @asset.some_file_path.should == "my_image_path.jpg" 
    end