使用环境变量测试Django视图

时间:2012-06-07 22:50:21

标签: django unit-testing

我开始为D​​jango应用程序编写测试,该应用程序依赖于几个环境变量。当我在shell中测试它时,我可以导入操作系统并指定变量,我的测试工作正常。但是,当我将它们放入tests.py时,我仍然会收到一个关键错误,因为找不到这些变量。这是我的测试结果:

from django.utils import unittest
from django.test.utils import setup_test_environment
from django.test.client import Client
import os

os.environ['a'] = 'a'
os.environ['b'] = 'b'


class ViewTests(unittest.TestCase):
    def setUp(self):
        setup_test_environment()

    def test_login_returning_right_template(self):
        """ get / should return login.html template """
        c = Client()
        resp = c.get('/')
        self.assertEqual(resp.templates[0].name, 'login.html')

这是初始化这些变量的错误位置吗?我尝试在setUp上做,但结果相同 - 找不到它们。有关如何在运行测试套件之前初始化环境变量的任何建议吗? 谢谢! 卢卡

1 个答案:

答案 0 :(得分:4)

您不应该在视图中的os.envior上转发。如果必须,请在settings.py

中执行此操作
MY_CUSTOM_SETTING = os.environ.get('a', 'default_value')

在视图中使用设置变量:

from django.conf.settings import MY_CUSTOM_SETTING
print MY_CUSTOM_SETTING

然后在您的测试中,您可以设置此设置:

from django.test import TestCase

class MyTestCase(TestCase):

    def test_something(self):
        with self.settings(MY_CUSTOM_SETTING='a'):
            c = Client()
            resp = c.get('/')
            self.assertEqual(resp.templates[0].name, 'login.html')