gpt4 book ai didi

python - 我应该如何在 Django 中编写 View 单元测试?

转载 作者:行者123 更新时间:2023-12-01 02:20:11 25 4
gpt4 key购买 nike

我想在 Django 中为这个方法编写一个单元测试。

def activate(request):
id = int(request.GET.get('id'))
user = User.objects.get(id=id)
user.is_active = True
user.save()
return render(request, 'user_authentication/activation.html')

我是这样写的:

def test_activate_view(self):
response = self.client.get('/activation', follow=True)
self.assertTemplateUsed(response, 'user_authentication/activation.html')

它不起作用,因为我收到错误:

id = int(request.GET.get('id'))
TypeError: int() argument must be a string or a number, not 'NoneType':

我应该在测试中更改什么?

最佳答案

您的 View 从 request.GET 读取数据 - 您需要传递此数据:

response = self.client.get('/activation?id=1', follow=True)

之后您还可以从数据库中获取该用户。因此,您需要加载一些夹具数据。使用manage.py dumpdata创建一个fixture并将其加载到单元测试中,如下所示:

class UserTestCase(TestCase):
fixtures = ['fixture.json', 'users']

Read the docs有关加载夹具的详细说明。

有关您的方法的注意事项

您不应在此用例中使用用户id。人们可以轻松猜出此 id 并激活帐户。

有人可能使用有效的电子邮件地址注册一次,收到包含 id 的链接,然后可以在不提供有效电子邮件地址的情况下创建一堆帐户。

相反,您可以生成一个唯一的随机 secret (又名 token )并将该 token 与用户相关联。您的 View 应该接受这些 token 并根据它解析用户。这样就无法再轻易激活。

关于python - 我应该如何在 Django 中编写 View 单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48042563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com