Python 我应该如何用Django编写视图单元测试?
我想用Django为这个方法编写一个单元测试Python 我应该如何用Django编写视图单元测试?,python,django,django-unittest,Python,Django,Django Unittest,我想用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_activ
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':
我应该在测试中更改什么?您的视图从
请求中读取数据。获取
-您需要传递此数据:
response = self.client.get('/activation?id=1', follow=True)
之后还可以从数据库中获取此用户。因此,您需要加载一些夹具数据。使用manage.py dumpdata
创建一个fixture,并将其加载到单元测试中,如下所示:
class UserTestCase(TestCase):
fixtures = ['fixture.json', 'users']
有关加载夹具的详细说明
注意您的方法
对于这个用例,您不应该使用usersid
。你可以很容易地猜出这个id
并激活帐户
有人可能会使用有效的电子邮件地址注册一次,然后收到您内部带有id
的链接,然后在不提供有效电子邮件地址的情况下创建一组帐户
相反,您可能会生成一个唯一的随机密钥(aka令牌),并将该令牌与用户关联。您的视图应该接受这些令牌并基于它解析用户。这样就不能再轻易激活了。测试发现了一个bug:如果有人没有在get请求中传递
id=…
参数,您将得到500个错误。您可能应该首先修复错误;-)Django的内置密码通过电子邮件重置,具有正确执行此操作所需的所有功能: