I'm trying to write tests for my new app and this is the first time I try to so I'm running into many errors.
This is my view:
from rest_framework import generics, filters
from todo import models
from .serializers import TaskSerializer
from django_filters.rest_framework import DjangoFilterBackend
#lists, creates and filters tasks
class ListTask(generics.ListCreateAPIView):
queryset = models.Task.objects.all()
serializer_class = TaskSerializer
filter_backends = [DjangoFilterBackend, filters.SearchFilter]
filterset_fields = ['date']
search_fields = ['description']
#allows to see detail of a task
class DetailTask(generics.RetrieveUpdateDestroyAPIView):
queryset = models.Task.objects.all()
serializer_class = TaskSerializer
I took a model from many tutorials to test that view and ended up with a very faulty code that looks like this:
from django.test import TestCase
from django.urls import reverse
from rest_framework.test import APIRequestFactory
from todo.views import ListTask, DetailTask
class ListTaskViewTest(TestCase):
def setUp(self):
self.data = {'title':'Any title', 'description': 'Any description', 'Completed':False, 'date':'Any date'}
self.factory = APIRequestFactory()
def create_task(self, title='Read'):
return Task.objects.create(title=title)
def test_list_task(self, title='Read'):
list_url = reverse('tasks-api:list')
obj = self.create_task()
request = self.factory.get(list_url)
response = ListTaskAPIView.as_view()(request)
self.assertEqual(response.status_code,200)
class DetailTaskTest(TestCase):
def setUp(self):
self.data = {'title':'Any title', 'description': 'Any description', 'Completed':False, 'date':'Any date'}
self.factory = APIRequestFactory()
def test_retrieve_task(self):
detail_url = reverse('tasks-api:detail', kwargs={'slug':obj.slug})
request = self.factory.get(detail_url)
response = DetailTaskAPIView.as_view()(request, slug=obj.slug)
self.assertEqual(response.status_code, 200)
def test_update_task(self):
obj = self.retrieve_task()
update_url = reverse('tasks-api:update', kwargs={'slug':obj.slug})
request = self.factory.put(update_url, data=self.data)
response = TaskUpdateAPIView.as_view()(request, slug=obj.slug)
self.assertEqual(response.status_code, 401)
def test_delete_task(self):
obj = self.retrieve_task(title='Random title')
delete_url = reverse('task-api:delete', kwargs={'slug':obj.slug})
request = self.factory.delete(delete_url)
response = TaskDestroyAPIView.as_view()(request, slug=obj.slug)
self.assertEqual(response.status_code, 401)
This is the result of trying to run this test:
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.....EEEE
======================================================================
ERROR: test_delete_task (todo.tests.test_views.DetailTaskTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\micae\Documents\python\django\challenge\todo\tests\test_views.py", line 44, in test_delete_task
obj = self.retrieve_task(title='Random title')
AttributeError: 'DetailTaskTest' object has no attribute 'retrieve_task'
======================================================================
ERROR: test_retrieve_task (todo.tests.test_views.DetailTaskTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\micae\Documents\python\django\challenge\todo\tests\test_views.py", line 30, in test_retrieve_task
detail_url = reverse('tasks-api:detail', kwargs={'slug':obj.slug})
NameError: name 'obj' is not defined
======================================================================
ERROR: test_update_task (todo.tests.test_views.DetailTaskTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\micae\Documents\python\django\challenge\todo\tests\test_views.py", line 37, in test_update_task
obj = self.retrieve_task()
AttributeError: 'DetailTaskTest' object has no attribute 'retrieve_task'
======================================================================
ERROR: test_list_task (todo.tests.test_views.ListTaskViewTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\micae\Documents\python\django\challenge\myvenv\lib\site-packages\django\urls\base.py", line 72, in reverse
extra, resolver = resolver.namespace_dict[ns]
KeyError: 'tasks-api'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\micae\Documents\python\django\challenge\todo\tests\test_views.py", line 16, in test_list_task
list_url = reverse('tasks-api:list')
File "C:\Users\micae\Documents\python\django\challenge\myvenv\lib\site-packages\django\urls\base.py", line 83, in reverse
raise NoReverseMatch("%s is not a registered namespace" % key)
django.urls.exceptions.NoReverseMatch: 'tasks-api' is not a registered namespace
----------------------------------------------------------------------
Ran 9 tests in 0.011s
FAILED (errors=4)
Destroying test database for alias 'default'...
I was wondering if anyone has any advice as to how to make it smoother and with less complications since many things are just not working and I'm not sure how to fix it since I'm very new at this and the tutorials are a bit obscure as to how to fix errors. Thank you for any type of advice!
Aucun commentaire:
Enregistrer un commentaire