我希望能够在Django应用程序中设置环境变量,以便测试能够运行.例如,我的视图依赖于几个API键.

通向override settings during testing的方法是有的,但我不希望在settings.py中定义它们,因为这是一个安全问题.

我已try 在设置函数中设置这些环境变量,但无法为Django应用程序提供这些值.

class MyTests(TestCase):
    def setUp(self):
        os.environ['TEST'] = '123'  # doesn't propogate to app

当我在本地测试时,我只需要运行一个.env文件

foreman start -e .env web

它提供os.environ个值.但是在Django的unittest.TestCase中,它没有办法(据我所知)来设置这一点.

我怎样才能避开这件事?

推荐答案

正如@schillingt在 comments 中指出的那样,EnvironmentVarGuard是正确的方式.

from test.test_support import EnvironmentVarGuard # Python(2.7 < 3)
from test.support import EnvironmentVarGuard # Python >=3
from django.test import TestCase

class MyTestCase(TestCase):
    def setUp(self):
        self.env = EnvironmentVarGuard()
        self.env.set('VAR', 'value')

    def test_something(self):
        with self.env:
            # ... perform tests here ... #
            pass

这在上下文对象with语句的持续时间内正确地设置了环境变量.

Django相关问答推荐

django命令中的no_color不起作用

Django Model邮箱字段是必需的,即使在我将其设置为NULL=True和BLACK=True之后也是如此

如何将Django项目连接到容器化的PostgreSQL数据库?

Django 中主键的隐式 UUID 自动字段

使用自定义的AuthBackend时,无法使用request.user.is_authenticated或@login_required修饰符

如何将多个模型添加到单个列表视图?

如何在 Django REST Framework API 响应中使用多标签过滤器?

Django ModelForm提交按钮不起作用

PyCharm:强制 Django 模板语法突出显示

django - 表单没有错误,但 form.is_valid() 没有验证

Django:通过manage.py使用服务器和gunicorn等其他服务器之间的区别.哪个更好?

Django Calendar日历小部件?

测试 Django ModelForm 是否有实例

使用基于日期/时间的对象进行 Django 单元测试

更新Django模型对象多个字段的有效方法

UnicodeEncodeError:ascii编解码器无法编码字符

如何重置 PostgreSQL 表上的 ID 序列

Django REST Framework - 序列化可选字段

为什么我的 Django 单元测试不知道安装了 MessageMiddleware?

关闭 Django Rest Framework ModelViewSet 的自动分页