Testes unitários nas views do Django usando @login_required
in Python / Testes on Python, Django, Testes
Esses dias precisei fazer alguns testes unitários nas actions das views da minha aplicação Django, para basicamente verificar se a sua requisição foi feito com sucesso, e se está usando o template correto. Só que isso é simples quando suas views não usam o decorator @login_required.
Nesse post ensina você a fazer os testes necessários quando as suas actions necessitam de uma autenticação do usuário.
1. Criando fixtures
Um dos procedimentos principais para que consiga executar os seus testes com sucesso, é criar fixtures que contenham dados de um usuário fictício. Caso possua usuários que fez para teste no seu banco de desenvolvimento, vai ser muito importante porque vamos fazer um dump dessas informações e jogar em um arquivo JSON. Digite o seguinte comando:
$ python manage.py dumpdata auth.User --indent 4 > users.json
Agora temos um arquivo chamado user.json para ser usado na classe de teste. Insira esse arquivo na pasta fixtures da sua aplicação:
$ mv users.json apps/clients/fixtures
Então vamos criar uma classe no arquivo* tests.py* da sua aplicação e testarmos uma action fictícia:
# -*- coding: utf8 -*-
from django.test import TestCase
from django.core.urlresolvers import reverse
class ClientViewTest(TestCase):
"""Unit test for client views"""
fixtures = ['users.json']
def setUp(self):
self.response = self.client.login(username='john', password='123456')
def test_profile_success(self):
self.response = self.client.get(reverse('clientes:profile'))
self.assertTrue(200, self.response.status_code)
self.assertTemplateUsed(self.response, 'clients/profile_form.html')
Quando for executar o teste, vai perceber que vai funcionar porque a variável response já vai receber o contexto do usuário que foi logado e assim ele terá a autorização de acessar/verificar o funcionamento das actions testadas.
Então é isso. Até mais ;)