1
resposta

Test URLS

Olá, tudo bem?

Na aula, esse é o código para rodar os tests de urls:

from django.test import TestCase, RequestFactory
from django.urls import reverse
from animais.views import index

class AnimaisURLSTestCase(TestCase):

    def setUp(self):
        self.factory = RequestFactory()

    def test_rota_url_utiliza_view_index(self):
        """Teste se a home da aplicação utiliza a função index da view"""
        request = self.factory.get('/')
        with self.assertTemplateUsed('index.html'):
            response = index(request)
            self.assertEqual(response.status_code, 200)

Nesse teste, temos um request e uma response; nesse caso, não seria mais prático usar client? Quando usar client e quando usar a factory?

Também gostaria de saber como ficaria o código usando o client, será que alguém poderia me ajudar? Obrigado!

1 resposta

Olá André, tudo bem com você?

Peço desculpas pela demora no retorno.

O RequestFactory é uma forma de criar instâncias de HttpRequest para testes unitários de views. Já o Client é uma forma completa de testar a aplicação, simulando o comportamento de um usuário real, fazendo requisições HTTP e recebendo as respostas.

O uso do RequestFactory é recomendado para testar views isoladamente, sem a necessidade de testar todo o fluxo da aplicação. Já o Client é recomendado para testar o comportamento completo da aplicação, incluindo o roteamento de URLs, a renderização de templates e a interação com o banco de dados.

Para utilizar o Client no seu teste, você pode substituir o RequestFactory pelo Client e utilizar o método get para fazer a requisição GET para a URL desejada. O código ficaria assim:

from django.test import TestCase, Client
from django.urls import reverse
from animais.views import index

class AnimaisURLSTestCase(TestCase):

    def setUp(self):
        self.client = Client()

    def test_rota_url_utiliza_view_index(self):
        """Teste se a home da aplicação utiliza a função index da view"""
        response = self.client.get(reverse('index'))
        self.assertTemplateUsed(response, 'index.html')
        self.assertEqual(response.status_code, 200)

Após a criação do teste, será necessário adicionar a propriedade nome= a URL index no arquivo setup/url.py, essa propriedade será a referência para o teste. O código deve ficar conforme abaixo:

urlpatterns = [
    path('', index, name='index'),
    path('admin/', admin.site.urls),
]

Após a mudança, salve o arquivo setup/url.py e execute o teste, e execute o comando pytest no terminal. Deverá ser apresentando a mensagem passed no terminal.

Espero ter lhe ajudado. Em caso de dúvidas estou à disposição.

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!