[PYTHON] Test Django

introduction

Ici, nous allons expliquer les tests dans Django.

Cible de test

La cible du test est la simple page de liste d'articles de blog suivante.

project/urls.py


from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')
]

blog/urls.py


from django.urls import path

from . import views

app_name = 'blog'
urlpatterns = [
    path('list/', views.PostList.as_view(), name='post_list')
]

blog/models.py


from django.db import models


class Post(models.model):
    title = models.CharField('Titre', max_length=100)
    body = models.TextField('Texte')
    created_at = models.DateTimeField('Date et heure de création', auto_now_add=True)
    updated_at = models.DateTimeField('Mettre à jour la date et l'heure', auto_now=True)

    class Meta:
        ordering = ('-created_at')
    
    def __str__(self):
        return self.title

blog/views.py


from django.views import generic


class PostList(generic.ListView):
    model = Post
    template_name = 'blog/post_list.html'

blog/post_list.html


{% for post in post_list %}
<h1>{{ post.title }}</h1>
<p>{{ post.body }}</p>
{% endfor %}

Créer une classe d'usine

Vous pouvez utiliser factory_boy pour créer un enregistrement de test.

blog/tests.py


import factory
from django.utils import timezone

from .models import Post


class PostFactory(factory.django.DjangoModelFactory):
    title = 'Sample post'
    body = 'This is a sample text.'
    created_at = timezone.now()
    updated_at = timezone.now()

    class Meta:
        model = Post

Ici, nous allons créer PostFactory comme classe d'usine pour le modèle Post. Vous pouvez définir des valeurs par défaut telles que «titre» et «texte».

Créer un test

blog/tests.py


from django.urls import reverse
from django.test import TestCase


class PostListTests(TestCase):

    def test_get_queryset(self):
        post_1 = PostFactory(
            title='First Post',
            body='This is the first post.'
        )
        post_2 = PostFactory(
            title='Second Post',
            body='This is the second post.'
        )
        res = self.client.get(reverse('blog:post_list'))
        self.assertTemplateUsed(res, 'blog/post_list.html')
        self.assertQuerysetEqual(
            res.context['post_list'],
            ['<Post: Second Post>', '<Post: First Post>']
        )
        self.assertEqual(
            res.context['post_list'][0].body,
            'This is the first post.'
        )
        self.assertEqual(
            res.context['post_list'][1].body,
            'This is the second post.'
        )

Tout d'abord, créez un enregistrement Post en utilisant la PostFactory créée ci-dessus. Ensuite, la réponse lors de l'accès à la page de liste d'articles est stockée dans la variable res. res contient post_list comme contexte créé par view, donc assurez-vous d'obtenir le jeu de requêtes que vous attendiez. Vous pouvez également utiliser ʻassertTemplateUsed dans les tests django pour voir si le modèle HTML spécifié dans views.py` est utilisé.

Lancer le test

Pour exécuter le test, entrez la commande suivante:

$ python manage.py test (blog)

Si vous entrez le nom de l'application à la fin, le test sera exécuté uniquement dans l'application spécifiée.

Résumé

Ici, j'ai expliqué le test dans django. Les tests sont également importants pour éviter les bogues à mesure que le développement progresse.

Recommended Posts

Test Django
tester
Django
[Django] Formulaire de connexion standard de test [TDD]
Développement piloté par les tests avec Django Partie 3
mise à jour de Django
Django Note 4
Développement piloté par les tests avec Django Partie 4
Mémorandum Django
Test de Jack Bella
recherche django
Installation de Django
Développement piloté par les tests avec Django Partie 6
Test de charge acridienne
Résumé de Django
Développement piloté par les tests avec Django Partie 2
Post test
Django # 2 (modèle)
Django Note 5
Django Hands On
Touchez django
Mémo Django
Résumé de Django
Les bases de Django
Django Shoho
Paramètres initiaux de Django
Django + Docker
Glossaire Django
Installation de Django
Django: Références
Django Note 1
Django Note 3
Développement piloté par les tests avec Django Partie 1
Django Note 2
Développement piloté par les tests avec Django Partie 5
Démarrage de Django
Mémo Django
Django NullCharField
Django: tester un middleware qui dépend d'un autre middleware
Tutoriel Django (Créer une application de blog) ④ --Test d'unité
Résumé du tutoriel Django pour les débutants par les débutants ⑤ (test)
Django ~ édition settings.py ~
Django Heroku Deploy 1
Modèle HTML Django partie 2
Formulaire de demande Django 2
À propos du test
Modèle Django: ManyToManyField
Qu'est-ce que Django? .. ..
Vue basée sur les fonctions Django
Tutoriel Python Django (5)
Mémo d'apprentissage Django
Tutoriel Python Django (2)
Notes de [Django] as_view ()
Premier défi Django
django makemigarations créeuperutilisateur
Sites liés à Django
Internationalisation avec Django
Vérification de la version de Django
création de table django
Django a commencé la partie 4