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

Django单元测试POST请求添加Bearer Token时出现int() base10转换错误

错误原因
  • 核心错误:生成JWT令牌时传入的对象错误。你在bearer_token属性中调用RefreshToken.for_user(self),这里的self是Django测试用例TestCase的实例,不是你创建的User用户对象。simplejwt生成令牌时会读取传入对象的用户ID字段(默认是id),而测试用例实例的id是内置方法不是用户ID值,最终写入令牌的用户ID是方法的字符串描述'<bound method TestCase.id of ...>',后续认证时要把这个值转成int自然报错。
  • 辅助问题:setUp方法写法错误,没有接收self参数,且创建的user、client都是局部变量,没有绑定到测试实例,后续测试方法无法访问到正确的用户和客户端实例。
  • 额外问题:你原来的断言写法无效,assert(response.status, 200)不会校验状态码,且响应的状态码属性为status_code而非status,创建类POST接口成功的标准状态码一般为201而非200。
修复方案

修正后的代码如下:

# 修正setUp方法,添加self参数,将资源绑定到测试实例
def setUp(self):
    self.user = User.objects.create_user(username='john', email='js@js.com', password='js.sj')
    self.client = APIClient()

@property
def bearer_token(self):
    """Generate token with bearer"""
    # 传入实际的用户对象self.user,而非测试用例实例self
    refresh = RefreshToken.for_user(self.user)
    return str(refresh.access_token)

def test_create_customer_profile(self, data):
    """
    Create a new customer profile.

    :param self: Reference to the current instance of the class.
    :param data: customer profile data.
    """
    token = self.bearer_token
    self.client.credentials(
        HTTP_AUTHORIZATION='Bearer ' + token)
    response = self.client.post(
        reverse('api:customers:customer-profile-list'), data)
    # 修正断言写法,状态码可根据你的接口实际逻辑调整
    self.assertEqual(response.status_code, 201)

内容的提问来源于stack exchange,提问作者Lutaaya Huzaifah Idris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:54:02