2011-09-26 95 views
4

我想運行一個rspec before塊來設置一些內容之前 Rails初始化器運行,所以我可以測試初始化​​器應該做什麼。這可能嗎?在Rails初始化器運行之前運行rspec「之前」塊

+0

什麼是你想測試的初始化?你可以只新了有問題的對象上自己? https://github.com/rspec/rspec-rails – Travis

+0

我們的代碼讀取外部文件,並基於其內容的變量:如果需要,我想你可以隨時深入到源。這發生在初始化器中。我想要進行測試,以確保它讀取文件,設置var以及處理丟失文件的情況等。我可以做很多hackery來假裝事情正在發生,但是我可以更接近實際操作(即最小的hackery)越好。最好的辦法是能夠創建運行初始化之前的文件,但我不能似乎能夠做到這一點。 – Pistos

回答

2

如果您初始化的邏輯是夠複雜的,應當進行測試,你應該將其解壓縮到您可以隔離和測試,而不在初始化的背景下是一個幫手。

complex_initializer.rb

config.database.foo = calculate_hard_stuff() 
config.database.bar = other_stuff() 

你可以提取到一個可測試的幫手(LIB /配置/ database.rb)

module Config::DatabaseHelper 
    def self.generate_config 
    {:foo => calculate_hard_stuff, :bar => other_stuff) 
    end 

    def calculate_hard_stuff 
    # Hard stuff here 
    end 
end 

...然後就線了配置數據的初始化程序

db_config_values = Config::DatabaseHelper.generate_config 
config.database.foo = db_config_values[:foo] 
config.database.bar = db_config_values[:bar] 

...並在單獨測試複雜配置確定/計算測試你可以在哪裏隔離輸入。

describe Config::DatabaseHelper do 
    describe '.calculate_hard_stuff' do 
    SystemValue.stubs(:config => value) 
    Config::DatabaseHelper.calculate_hard_stuff.should == expected_value 
    end 
end 
相關問題