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

Django+pytest路由测试报错:TypeError期望字符串或类字节对象

解决Django+pytest中的TypeError: expected string or bytes-like object问题

错误根源

  1. Fixture日期赋值错误:你在news fixture中给date字段赋值为datetime.today,这是一个方法对象而非实际的日期值。Django在处理这个字段时,会尝试将其解析为日期字符串,方法对象无法被解析,直接抛出TypeError。
  2. 测试变量引用错误:测试函数里生成URL时用了news.id,但news并没有在函数参数中定义,应该使用参数args(args对应pytest.lazy_fixture('news')注入的实例)。

修复代码

1. 修正Fixture代码

@pytest.fixture
def news():
    news = News.objects.create(
        title='Новость',
        text='Невероятное событие',
        date=datetime.today(),  # 加上括号调用方法,获取实际日期值
    )
    return news

2. 修正测试代码

@pytest.mark.django_db
@pytest.mark.parametrize(
    'name, args',
    (
        ('news:detail', pytest.lazy_fixture('news')),
        ('news:home', None),
        ('users:login', None),
        ('users:logout', None),
        ('users:signup', None),
    )
)
def test_pages_availability(client, name, args):
    if args is not None:
        url = reverse(name, args=(args.id,))  # 使用args参数获取news实例的id
    else:
        url = reverse(name)
    response = client.get(url)
    assert response.status_code == HTTPStatus.OK

验证修复

修复后重新运行测试,两个问题均被解决:

  • Fixture生成合法的日期值存入数据库,Django可正常解析
  • 测试函数能正确获取news实例的id,生成有效URL并成功访问页面

内容的提问来源于stack exchange,提问作者Vladimir Shevchenko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:44:58