Tester une application Django

Réalisons à présent quelques tests unitaires sur notre app Django.

Un test unitaire bébête

# A mettre dans le fichier tests.py de l'app Django
from django.core.urlresolvers import resolve
from django.test import TestCase
from lists.views import home
from django.template.loader import render_to_string

class StringTest(TestCase):
    '''Test unitaire bidon'''
    def test_concatene(self):
        self.assertEqual("Bon"+"jour", "Bonjour")

Un test qui vérifie la méthode gérant la racine du site:

# A mettre dans le fichier tests.py de l'app Django
from django.core.urlresolvers import resolve
from django.test import TestCase
from lists.views import home


class HomePageTest(TestCase):
'''
Test unitaire de la page accueil sur la racine du projet
On vérifie que la méthode home() est bien invoquée sur /
'''
    def test_root_url_resolves_to_home_view(self):
      found = resolve('/')
      self.assertEqual(found.func, home)

Puis un test vérifiant si le contenu présenté correspond bien à celui du template home.html

# A mettre dans le fichier tests.py de l'app Django
from django.core.urlresolvers import resolve
from django.test import TestCase
from lists.views import home
from django.template.loader import render_to_string


class HomePageTestContent(TestCase):
    '''Test Unitaire pour vérifier si le contenu de la page d'accueil est bien retourné par home()'''
    request = HttpRequest()
    response = home(request)
    expected_html = render_to_string('home.html')
    self.assertEqual(response.content.decode(), expected_html)

Pour tester:

./manage.py test

Constatez l’échec du test.

Puis ajouter la route et la vue correspondante pour que le test passe …

Test de la route “/lesTaches/” et du contenu de la page d’accueil

from lesTaches.views import accueil
from django.urls import resolve
from django.http.request import HttpRequest

class AccueilPageTest(TestCase):
    '''
    Test unitaire de la page accueil sur la racine du projet
    On vérifie que la méthode accueil() est bien invoquée sur /
    '''
    def test_accueil_url_resolves_to_accueil_view(self):
        found = resolve('/lesTaches/')
        self.assertEqual(found.func, accueil)

    def test_accueil_page_content(self):
        '''
        Test Unitaire pour vérifier si le contenu de la page d'accueil
        de l'app lesTaches est bien retourné par la view accueil()
        '''
        req = HttpRequest()
        response = accueil(req)
        expected = "Bienvenue ici"
        self.assertEqual(response.content.decode(), expected)