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'
我尝试使用 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'