Flask Unittest - 由于 NoneType 参数导致类型错误

Flask Unittest - Type Error because of NoneType argument

我尝试使用 unittest 测试我的代码,其中变量存储在文件中的某个位置并使用 os.getenv

访问

settings.py

     import os
     TARGET_VAR = os.getenv('TARGET_VAR_VALUE')

一些 apiclass

     from settings import TARGET_VAR
     class someApi:
         def __init__(self):
                print(TARGET_VAR) // good if running normally
     ....rest of func

测试

   def test_extreme_devices(self):
      app = Flask(__name__)
      app.config["LOGIN_DISABLED"] = True


      api = flask_restful.Api(app)

      api.add_resource('someApi', '/devices/')

      with app.test_client() as client:
         res = client.get('/devices/')

         self.assertEqual(res.status_code, 200)

.env

 TARGET_VAR_VALUE='some target value'

这 运行 不错,但 运行 测试时不行 我在 运行 测试 someApi class 时感到困惑,我得到了错误

     TypeError: int() argument must be a string, a bytes-like object or a number, not 
     'NoneType'

显然 TARGET_VAR 是 NoneType,即使它的值是在 .env

中设置的

直接给它加上实际值就可以了

   TARGET_VAR = 'actual value'

这个问题只出现在单元测试上,但当 flask 是 运行 并访问路由(如邮递员)时不会出现

可能是当您在本地 运行 Flask 应用程序时,环境已经 TARGET_VAR_VALUE 加载到 os 环境中。

如果在 运行 单元测试时使用 python-dotenv 之类的东西,则可以确保环境一致。只需指定要使用的正确 .env 文件并确保它覆盖任何其他环境变量:

from dotenv import load_dotenv

load_dotenv("tests/test.env", override=True)

tests/test.env

TARGET_VAR_VALUE='some target value'