Получение AttributeError: 'TestCalls' object has no attribute 'assertTemplateUsed' when trying to unit test views.py using unittest framework
Вот мой код для юнит-теста fruit view. Но получаю AttributeError
test_views.py
class TestViews(unittest.TestCase):
def test_fruit_GET(self):
client = Client()
response = client.get(reverse('products:fruit'))
self.assertEquals(response.status_code, 200)
self.assertTemplateUsed(response, 'products/fruit.html')
views.py
def fruit(request):
product = Product.objects.filter(category="Fruit")
n = Product.objects.filter(category="Fruit").count()
params = {'product': product, 'n': n}
return render(request, 'products/fruit.html', params)
Этот метод является частью класса TestCase от django, поэтому вам нужно использовать его вместо этого:
from django.test import TestCase
class TestViews(TestCase):
def test_fruit_GET(self):
client = Client()
response = client.get(reverse('products:fruit'))
self.assertEquals(response.status_code, 200)
self.assertTemplateUsed(response, 'products/fruit.html')
Это не доступно для unittest.TestCase. Это обеспечивается классом TestCase от Django [Django-doc], поэтому:
from django.test import TestCase
class TestViews(TestCase):
def test_fruit_GET(self):
response = self.client.get(reverse('products:fruit'))
self.assertEquals(response.status_code, 200)
self.assertTemplateUsed(response, 'products/fruit.html')
Вы можете реализовать это самостоятельно, но это очень неудобно:
def assertTemplateUsed(self, response, template_name):
self.assertIn(
template_name,
[t.name for t in response.templates if t.name is not None]
)