Railsイニシャライザが実行される前にrspecbefore
ブロックを実行していくつかのものを設定したいので、イニシャライザが何をすべきかをテストできます。これは可能ですか?
1547 次
1 に答える
2
イニシャライザのロジックがテストする必要があるほど複雑な場合は、イニシャライザのコンテキストにいなくても分離してテストできるヘルパーにそれを抽出する必要があります。
complex_initializer.rb
config.database.foo = calculate_hard_stuff()
config.database.bar = other_stuff()
それをテスト可能なヘルパー (lib/config/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
于 2012-09-11T19:55:31.010 に答える