You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

测试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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:33:11