У меня есть два теста в отдельных классах, которые проверяют похожее поведение:
- Добавление товара в закладки с помощью
Client()
. - Добавление товара в закладки с помощью ORM.
По отдельности работает:
./manage.py test compare.test.CompareBookmarkTests
или
./manage.py test compare.test.CompareAccountTests
Они не работают, когда запускаются вместе:
./manage.py test
Я пытался:
- использование
setUp
и tearDown
методов - изменение порядка классов и методов
- использование --reverse в моих попытках диагностировать проблему
- запускать строки кода в интерактивной оболочке django с тестовой базой данных (и она работает)
- выполнить отладку печати, мои объекты правильно вызываются из тестовой базы данных.
- объединить эти два классав одном
На данный момент я не нашел соответствующих ответов на stackoverflow.Ни в документации по django.
from django.contrib.auth.models import User
from django.test import TestCase
from .models import Bookmark, Categorie, Product
class CompareBookmarkTests(TestCase):
def setUp(self):
Categorie.objects.create(id_categorie='someid', name='somename')
p = Categorie.objects.get(pk='someid')
p.product_set.create(id_product='1', product_name='orange', categorie='someid')
User.objects.create_user('john@sign.in', 'john@sign.in', 'smith')
def tearDown(self):
User.objects.all().delete()
Categorie.objects.all().delete()
Bookmark.objects.all().delete()
def test_redirect_logged(self):
self.client.login(username='john@sign.in', password='smith')
# Adding product with id 1 in bookmark
response = self.client.get('/compare/1/bookmark/')
# Get added product form bookmark
bookmark = Bookmark.objects.get(pk=1)
self.assertEqual(str(bookmark), 'Bookmark object (1)')
self.assertEqual(response.status_code, 302)
class CompareAccountTests(TestCase):
def setUp/tearDown: [same as previous class]
def test_get_product(self):
self.client.login(username='john@sign.in', password='smith')
user = User.objects.get(pk=1)
product = Product.objects.get(pk='1')
# Adding product with id 1 in bookmark
add_bookmark = Bookmark.objects.create(id_result=product, user=user)
bookmark = Bookmark.objects.get(pk=1)
response = self.client.get('/compare/account/')
self.assertEqual(str(bookmark), 'Bookmark object (1)')
self.assertEqual(response.status_code, 200)
Я ожидаю, что оба моих теста пройдут успешно при совместном запуске, но я получаю:
compare.models.Bookmark.DoesNotExist: Bookmark matching query does not exist.
С --reverse:
django.contrib.auth.models.User.DoesNotExist
Вероятно, это ошибка новичка, но я ее не вижу, спасибо за помощь!