3

環境:Rails 3.1.1 and Rspec 2.10.1 外部YAMLファイルを介してすべてのアプリケーション構成をロードしています。私の初期化子(config/initializers/load_config.rb)は次のようになります

AppConfig = YAML.load_file("#{RAILS_ROOT}/config/config.yml")[RAILS_ENV]

そして私のYAMLファイルはconfig/config.ymlの下にあります

development:
 client_system: SWN
 b2c_agent_number: '10500'
 advocacy_agent_number: 16202
 motorcycle_agent_number: '10400'
 tso_agent_number: '39160'
 feesecure_eligible_months_for_monthly_payments: 1..12

test:
 client_system: SWN
 b2c_agent_number: '10500'
 advocacy_agent_number: 16202
 motorcycle_agent_number: '10400'
 tso_agent_number: '39160'
 feesecure_eligible_months_for_monthly_payments: 1..11

そして、私はこれらの値に次のようにアクセスします。AppConfig['feesecure_eligible_months_for_monthly_payments']

私のテストの1つではAppConfig['feesecure_eligible_months_for_monthly_payments']、別の値を返す必要がありますが、これを実現する方法がわかりません。私は運が悪かった次のアプローチを試しました

describe 'monthly_option_available?' do
 before :each do
  @policy = FeeSecure::Policy.new
  @settlement_breakdown = SettlementBreakdown.new
  @policy.stub(:settlement_breakdown).and_return(@settlement_breakdown)
  @date = Date.today
  Date.should_receive(:today).and_return(@date)
  @config = mock(AppConfig)
  AppConfig.stub(:feesecure_eligible_months_for_monthly_payments).and_return('1..7')
 end
 .....
 end

私のそれぞれのクラスでは、私はこのようなことをしています

class Policy        
 def eligible_month?
  eval(AppConfig['feesecure_eligible_months_for_monthly_payments']).include?(Date.today.month)
 end
....
end

誰かが私を正しい方向に向けてくれませんか!

4

1 に答える 1

6

実行するときに呼び出されるメソッドAppConfig['foo']は、[]1つの引数(取得するキー)を受け取るメソッドです。

したがって、テストでできることは

AppConfig.stub(:[]).and_return('1..11')

with引数の値に基づいてさまざまな期待値を設定するために使用できます。

AppConfig.stub(:[]).with('foo').and_return('1..11')
AppConfig.stub(:[]).with('bar').and_return(3)

模擬のAppConfigオブジェクトを設定する必要はありません。スタブを「実際の」オブジェクトに直接貼り付けることができます。

于 2012-06-19T07:13:02.583 に答える