2013-10-07 21 views
0

我在我的代碼多次調用File.expand_path(Rails.root)磕碰File.expand_path在rspec的/導軌4

測試我創建了以下在規格配置/支持

RSpec.configure do |config| 
    config.before(:each) do 
    File.stub(:expand_path).and_return("spec/fs") 
    end 
end 

所以這不是「/ home/user中/」每個請求File.expand_path回報「的投機/ FS /」

,效果不錯,同時我移動到軌道4,5但是之後是在軌道3

,測試開始投擲以下錯誤:

Failure/Error: let(:category) { build(:category) } 
LoadError: 
    cannot load such file -- spec/fs 

爲什麼會出現/我該如何解決這個問題?

ps。

測試/模型是非常基本的,但奇怪的是這個測試用例失敗:

#in class 
def first method(category) 
    "#{File.expand_path(Rails.root)}/public/collections/#{self.name}/_new/#{category.name.downcase}" 
end 

#in rspec 
describe "#first_method" do 
    it { expect(collection.first_method(category)).to be_instance_of(String) } 
end 

但是這一次不!

#in class 
def second_method 
    "#{File.expand_path(Rails.root)}/public/collections/#{self.name}/_new/" 
end 

#in rspec 
describe "#second_method" do 
    it { expect(collection.second_method).to be_instance_of(String) } 
end 

類製品廠爲簡單:

FactoryGirl.define do 
    factory :category do 
    name "TestCategory" 
    end 
end 

簡單

let(:category) { build(:category) } 

但是好像存根失敗內置正好出現在構建:類工廠

回答

0

通過將File.expand_path(Rails.root)定義爲應用程序範圍內的環境相關常量並修改它以適用於測試環境得到修復。

1

File.expand_path是一種非常常用的方法。如果Rails,RSpec或FactoryGirl軟件將它作爲它們的代碼的一部分,並且在雙精度加載(例如加載Category型號代碼)後執行,我不會感到驚訝。通過打印堆棧跟蹤或在調用器被調用並查看您的位置時,您可以輕鬆驗證這一點。

+0

謝謝,這證實了我的懷疑 –