我应该如何在Django中编写view unittest?

时间:2017-12-31 12:47:53

标签: 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_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':

我的测试应该改变什么?

1 个答案:

答案 0 :(得分:2)

您的视图从module.exports = (app, partials) => { app.post('/newuser', (req, res, next) => { console.log(req.header('Content-Type')) console.log(req.body) // this prints [object Object] console.log(JSON.parse(req.body)) // this throws SyntaxError: Unexpected token o in JSON at position 1 }); }; 读取数据 - 您需要传递此数据:

request.GET

您之后也会从数据库中获取此用户。因此,您需要加载一些夹具数据。使用response = self.client.get('/activation?id=1', follow=True) 创建一个夹具并将其加载到您的单元测试中:

manage.py dumpdata

Read the docs关于加载灯具的详细说明。

关于您的方法的说明

您不应将用户class UserTestCase(TestCase): fixtures = ['fixture.json', 'users'] 用于此用例。可以轻松猜出这个id并激活帐户。

有人可能会使用有效的电子邮件地址注册一次,通过内部id接收您的链接,然后可以创建一堆帐户而无需提供有效的电子邮件地址。

相反,您可能会生成一个唯一且随机的秘密(又名令牌),并将此令牌与用户相关联。您的视图应接受这些令牌并根据它来解析用户。这样就不能再轻松激活了。