首页 > 解决方案 > 如何仅在 Django 测试期间更改环境变量?

问题描述

我有一个扩展 root 的类TestCase。我想在扩展此类的每个测试中设置一个环境变量,这样我就不会在不必要的 API 查询上循环。

当我将补丁装饰器放在课堂之外时,它似乎没有任何效果。

当我将补丁装饰器放在 setUp 上方时,补丁似乎只持续到 setUp 的持续时间。

import mock, os
from django.test import TestCase


#patching here seems to have no effect
class TCommerceTestCase(TestCase):

  @mock.patch.dict(os.environ, {
    "INSIDE_TEST": "True"
  })
  def setUp(self):
    self.assertEqual(os.environ["INSIDE_TEST"], "True") # works!

  def test_inside_test(self):
    self.assertEqual(os.environ["INSIDE_TEST"], "True") # Fails!

如何在 Django 测试中修补环境变量(无需手动修补每个函数?)

标签: django

解决方案


以这种方式尝试:

import mock, os
from django.test import TestCase

class TCommerceTestCase(TestCase):

  @mock.patch.dict(os.environ, {
    "INSIDE_TEST": "True"
  })
  def test_inside_test(self):
    self.assertEqual(os.environ["INSIDE_TEST"], "True")
    ```

推荐阅读