LoginSignup
1
2

More than 5 years have passed since last update.

Settingslogicの設定値を、テストの時だけ変更する

Last updated at Posted at 2018-07-01

やりたいこと

gem settingslogic で定義された設定値をテストの時だけ変えたい

やりかた

2種類の方法があります。

方法1:test用のネームスペースに値を記述する

yamlにtest用のネームスペースがあると思いますので、そこに記述します。

# config/application.yml
defaults: &defaults
  parent:
    child1: default_value1
    child2: default_value2
  awesome_setting: 800

development:
  <<: *defaults

test:
  <<: *defaults
  parent:
    child1: value1 # 特定のキーだけ上書き
    child2: value2

production:
  <<: *defaults

方法2:stub_const などrspecの機能を利用する

テストフレームワークにrspecを採用している場合、以下のテストコードでstubできます。

let(:fake_settings) do
  obj = double("Settings")
  allow(obj).to receive_message_chain(:parent, :child1).and_return('value1')
  allow(obj).to receive_message_chain(:parent, :child2).and_return('value2')
  obj
end

before do
  stub_const("Settings", fake_settings)
end

「方法1」とくらべ、柔軟に値を変更できるので、「設定値がAならこう、Bならこう」といったテストをしたい場合は、こちらの方法がおすすめです。

参考URL

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2