我想在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':
我的测试应该改变什么?
答案 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
接收您的链接,然后可以创建一堆帐户而无需提供有效的电子邮件地址。
相反,您可能会生成一个唯一且随机的秘密(又名令牌),并将此令牌与用户相关联。您的视图应接受这些令牌并根据它来解析用户。这样就不能再轻松激活了。