Тест Django IntegrityError при разборе приспособления ⇐ Python

Программы на Python
Anonymous
Тест Django IntegrityError при разборе приспособления

Сообщение Anonymous »

Я начал использовать пакет Factory_boy, поэтому настроил несколько фабрик и хотел проверить, что создаваемые объекты не вызывают ошибок проверки.

Вот миксин, который я использую, который по сути берет каждую фабрику из модуля, создает экземпляр, а затем проверяет отсутствие ошибок из .full_clean(). Загружаются пользовательские приборы — это 10 экземпляров с идентификаторами от 1 до 10.

class FactoriesTestCaseMixin:
fixtures = [
'user/tests/fixtures/user.json',
]
module = None

def test_factories(self):
err_msg = '{name} caused errors:\n{errors}'
factories = [
(name, obj) for name, obj in inspect.getmembers(self.module, inspect.isclass)
if obj.__module__ == self.module.__name__
and not obj._meta.abstract
]
for factory in factories:
name = factory[0]
instance = factory[1]()

errors = None
try:
instance.full_clean()
except ValidationError as e:
errors = e

self.assertTrue(errors is None, err_msg.format(name=name, errors=errors))


Миксин будет использоваться следующим образом

from django.test import TestCase
from order import factories

class OrderFactoriesTestCase(FactoriesTestCaseMixin, TestCase):
module = factories


Но я продолжаю получать ошибку IntegrityError (обратная трассировка ниже) после успешного прохождения теста в отношении демонтажа приспособления, и я не могу понять, как обойти это поэтому мои тесты проходят без ошибок.

Если я запускаю тесты для каждого отдельного приложения, ошибок не возникает. У меня никогда не возникало проблем ни с одним из приборов моей другой модели, у которых также есть поле Create_by.

django.db.utils.IntegrityError: insert or update on table "product_product" violates foreign key constraint "product_product_created_by_id_96713f93_fk_user_user_id"
DETAIL: Key (created_by_id)=(13) is not present in table "user_user".


Я думаю, что происходит то, что предыдущий тест создает нового пользователя, а итератор заводского мальчика выбирает один из новых идентификаторов пользователя.. все еще не знаю, почему это может вызвать ошибку после успешного прохождения теста.

created_by = factory.Iterator(User.objects.all())


Модули, вызывающие эту проблему, всегда имеют подфабрику для ProductFactory

product = factory.SubFactory(ProductFactory)


Есть предложения по решению этой проблемы?

Traceback (most recent call last):
File "/home/Development/project/venv/lib/python3.7/site-packages/django/test/testcases.py", line 274, in __call__
self._post_teardown()
File "/home/Development/project/venv/lib/python3.7/site-packages/django/test/testcases.py", line 1009, in _post_teardown
self._fixture_teardown()
File "/home/Development/project/venv/lib/python3.7/site-packages/django/test/testcases.py", line 1177, in _fixture_teardown
connections[db_name].check_constraints()
File "/home/Development/project/venv/lib/python3.7/site-packages/django/db/backends/postgresql/base.py", line 246, in check_constraints
self.cursor().execute('SET CONSTRAINTS ALL IMMEDIATE')
File "/home/Development/project/venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 67, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "/home/Development/project/venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
return executor(sql, params, many, context)
File "/home/Development/project/venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "/home/Development/project/venv/lib/python3.7/site-packages/django/db/utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/home/Development/project/venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 82, in _execute
return self.cursor.execute(sql)
django.db.utils.IntegrityError: insert or update on table "product_product" violates foreign key constraint "product_product_created_by_id_96713f93_fk_user_user_id"
DETAIL: Key (created_by_id)=(12) is not present in table "user_user".


Подробнее здесь: https://stackoverflow.com/questions/579 ... e-teardown

Вернуться в «Python»