Два теста работают индивидуально, но не вместе - PullRequest
1 голос
/ 01 мая 2019

У меня есть два теста в отдельных классах, которые проверяют похожее поведение:

  1. Добавление товара в закладки с помощью Client().
  2. Добавление товара в закладки с помощью 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

Вероятно, это ошибка новичка, но я ее не вижу, спасибо за помощь!

1 Ответ

0 голосов
/ 02 мая 2019

Я нашел причину проблемы:

Я использовал psql и нашел тестовые базы данных, которые не были удалены:

test_myprojet_1
test_myprojet_2
test_myprojet_3
test_myprojet_4
...and so on...

В дополнение к очень странному:

test_test_test_test_test_test_test_test_test_test_test_myprojec[truncated name]

Я использовал в psql:

DROP DATABASE [name];

Теперь мои тесты работают как положено!

Благодаря awesoon , ваше предложение поставило меня на путь.

...