Hier erklären wir die Tests in Django.
Das Testziel ist die folgende einfache Blog-Artikellistenseite.
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('Titel', max_length=100)
body = models.TextField('Text')
created_at = models.DateTimeField('Erstellungsdatum und -zeit', auto_now_add=True)
updated_at = models.DateTimeField('Datum und Uhrzeit aktualisieren', 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 %}
Sie können factory_boy
verwenden, um einen Testdatensatz zu erstellen.
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
Hier erstellen wir "PostFactory" als Fabrikklasse für das "Post" -Modell. Sie können Standardwerte wie "Titel" und "Text" festlegen.
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.'
)
Erstellen Sie zunächst einen Post-Datensatz mit der oben erstellten PostFactory.
Die Antwort beim Zugriff auf die Artikellistenseite wird dann in der Variablen "res" gespeichert.
res
enthält post_list
als den von view erstellten Kontext. Stellen Sie also sicher, dass Sie das erwartete Abfrageset erhalten.
In Django-Tests können Sie außerdem "assertTemplateUsed" verwenden, um festzustellen, ob die in "views.py" angegebene HTML-Vorlage verwendet wird.
Geben Sie den folgenden Befehl ein, um den Test auszuführen:
$ python manage.py test (blog)
Wenn Sie am Ende den Anwendungsnamen eingeben, wird der Test nur in der angegebenen Anwendung ausgeführt.
Hier habe ich den Test in Django erklärt. Das Testen ist auch wichtig, um Fehler im Verlauf der Entwicklung zu vermeiden.
Recommended Posts