2011-09-26 105 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 
相关问题