测试Tortoise ORM接口时出现'NoneType'不可迭代错误求助
问题描述
测试用户创建新资料接口时,持续触发错误:TypeError: 'NoneType' object is not iterable。已确认数据库连接正常,但测试始终失败。相关代码及报错信息如下:
模型注册代码
register_tortoise( app, db_url='postgresql://user:pass@localhost:5432', modules={'models': ['db.models']}, generate_schemas=True, add_exception_handlers=True, )
测试客户端函数
def test_create_profile(): new_profile_data = { "first_name": "John", "last_name": "Doe", "email_address": "john.doe@example.com", "city": "New York", "phone_number": "123456789", "job_prefernece_title": "Software Developer", "job_prefernece_type": "Full-time" } token = "my_token" headers = { "Authorization": f"Bearer {token}" } response = client.post("/create_profile", json=new_profile_data, headers=headers) assert response.status_code == 200 assert response.json() == { "user": "<username>", "first_name": "John", "last_name": "Doe", "email_address": "john.doe@example.com", "city": "New York", "phone_number": "123456789", "job_prefernece_title": "Software Developer", "job_prefernece_type": "Full-time" }
报错信息
def _router_func(self, model: Type["Model"], action: str): for r in self._routers: TypeError: 'NoneType' object is not iterable
排查与解决方案
- 确认Tortoise-ORM路由初始化状态:报错显示
self._routers为None,说明Tortoise的路由系统未正确初始化。核心原因是测试环境中,Tortoise的配置加载时机不对,或者测试客户端未关联已初始化的Tortoise实例。 - 测试环境显式初始化Tortoise:如果使用FastAPI+TestClient,需在测试前完成Tortoise的初始化和销毁。可以用pytest fixture来管理生命周期:
import pytest from tortoise import Tortoise @pytest.fixture(scope="module") async def init_db(): await Tortoise.init( db_url='postgresql://user:pass@localhost:5432', modules={'models': ['db.models']} ) await Tortoise.generate_schemas() yield await Tortoise.close_connections() def test_create_profile(init_db, client): # 保留原测试逻辑 - 检查模型定义合法性:确保
db.models中的所有模型都正确继承自tortoise.models.Model,且无语法错误。模型加载失败会导致Tortoise路由系统初始化异常。 - 调整测试客户端创建时机:必须在
register_tortoise执行完成后再创建测试客户端,否则客户端无法获取到Tortoise的路由配置。 - 修正测试数据拼写错误:测试数据中的
job_prefernece_title和job_prefernece_type存在拼写错误(正确应为job_preference),虽然不会直接触发当前TypeError,但会导致接口返回数据不符合预期,建议修正。
内容的提问来源于stack exchange,提问作者Neo_77cyber
相关产品推荐
相关产品推荐

