Инкрементирование PK при добавлении нового TestCase
Я понял, что при добавлении нового TestCase PK в старом TestCase увеличивается. Например, я тестирую метод .get_absolute_url:
def get_absolute_url(self):
return reverse('linkdetail', kwargs={'pk': self.pk})
с этим тестом
def test_get_absolute_url(self):
obj = Link.objects.get(title="test_tile")
self.assertEqual(obj.get_absolute_url(), "/link/1/")
и до этого момента все в порядке и тест проходит, но когда я добавляю еще один TestCase
class LinkCommentTestCase(TestCase):
def setUp(self):
user = User.objects.create(username="test",
password="asd")
link = Link.objects.create(title="test_tile2",
link="http://google.com",
author=user)
comment = LinkComment.objects.create(author=user,
link=link,
content="asd")
def test_get_comments_count(self):
obj = LinkComment.objects.get(content="asd")
я получаю эту ошибку
======================================================================
FAIL: test_get_absolute_url (links.tests.test_models.LinkTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/x/Desktop/x/links/tests/test_models.py", line 72, in test_get_absolute_url
self.assertEqual(obj.get_absolute_url(), "/link/1/")
AssertionError: '/link/2/' != '/link/1/'
- /link/2/
? ^
+ /link/1/
?
Почему это происходит и как я могу это предотвратить?
Не указывайте жестко pk, создайте ожидаемый URL динамически.
def test_get_absolute_url(self):
obj = Link.objects.get(title="test_tile")
self.assertEqual(obj.get_absolute_url(), f"/link/{obj.pk}/")
Вы не можете быть уверены, что ваш тестовый объект всегда будет получать один и тот же pk
Вы можете проверить результат GET на возвращаемый URL, если не хотите динамически создавать ожидаемый URL
def test_get_absolute_url(self):
obj = Link.objects.get(title="test_tile")
response = self.client.get(obj.get_absolute_url())
self.assertEqual(response.status_code, 200)
# Test for func based view matched
self.assertEqual(response.resolver_match.func, link_detail)
# Test for class based view matched
self.assertEqual(response.resolver_match.func.__name__, LinkDetail.as_view().__name__)