djangoでテスト時にsettings.pyの内容を変更する
テストのためにsettings.pyの値を変えたい場合ってありますね。
テスト起動時に--settingsオプションでテスト用の別ファイルを指定する方法もありますが、他にも方法が用意されています。
Testing Django applications | Django documentation | Django
view関数でsettingsの内容を読みだしてcontextに設定するだけのサンプルです。
# settings.py SAMPLE_SETTING = 'HELLO' # views.py class SimpleSettingOverrideView(TemplateView): template_name = 'apps/override.html' def get_context_data(self, **kwargs): ctx = super(SimpleSettingOverrideView, self).get_context_data(**kwargs) ctx.update({'sample_setting': settings.SAMPLE_SETTING}) return ctx # urls.py url(r'^simple_override/?$', SimpleSettingOverrideView.as_view(), name='simple_override'),
テスト
class SimpleOverrideTest(TestCase): def test_not_override(self): client = Client() res = client.get(reverse('simple_override')) self.assertEquals(res.context_data['sample_setting'], 'HELLO') @override_settings(SAMPLE_SETTING='OVERRIDE') def test_override_settings(self): client = Client() res = client.get(reverse('simple_override')) self.assertEquals(res.context_data['sample_setting'], 'OVERRIDE') def test_override_context(self): client = Client() with self.settings(SAMPLE_SETTING='CONTEXT_OVERRIDE'): res = client.get(reverse('simple_override')) self.assertEquals(res.context_data['sample_setting'], 'CONTEXT_OVERRIDE')
ちゃんと上書きされてます。