4

Railsイニシャライザが実行される前にrspecbeforeブロックを実行していくつかのものを設定したいので、イニシャライザが何をすべきかをテストできます。これは可能ですか?

4

1 に答える 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 に答える