Я написал тесты Django, используя django.test.TestCase, и я хотел бы использовать приспособление со всеми данными моей текущей базы данных для запуска тестов. Однако, если я создам приспособление следующим образом:
python manage.py dumpdata --indent=3 > myapp/fixtures/test_data.json
когда я затем запускаю тесты, используя python manage.py test myapp
, я получаю следующую ошибку:
Problem installing fixture...(traceback)
IntegrityError: Could not load auth.Permission(pk=42): duplicate key value violates unique constraint "auth_permission_content_type_id_codename_key"
DETAIL: Key (content_type_id, codename)=(14, add_record) already exists.
Я где-то читал на SO, что это может быть вызвано конфликтом pk, поэтому я попытался воссоздать прибор с помощью:
python manage.py dumpdata --natural --indent=3 > myapp/fixtures/test_data.json
Но теперь запуск теста дает мне:
Problem installing fixture...(traceback)
DeserializationError: 'NoneType' object has no attribute '_meta'
Я также пробовал по-разному исключать (используя параметр --exclude
) auth.permission
и contenttypes
(или оба одновременно), но потом я получаю жалобы на отсутствие разрешений (Key (permission_id)=(44) is not present in table "auth_permission".
) или типов содержимого (DeserializationError: ContentType matching query does not exist.
)
Дело в том, что мне все равно нужны разрешения, потому что мои тесты частично предназначены для проверки того, что только пользователи с определенными разрешениями могут получить доступ к определенным представлениям.
Честно говоря, я не понимаю, почему это происходит - у меня сложилось впечатление, что средство запуска тестов запускается с полностью чистой базой данных и загружает ВСЕ из моего устройства, но читает такие сообщения: Модульное тестирование Django с загрузкой фикстур для нескольких проблем зависимых приложений кажется, что это не так.
Как я могу это обойти? Я бы предпочел не писать такие вещи, как User.objects.create_user(..
тонны раз под def setUp(self):
в моих тестах, просто чтобы было достаточно объектов для их правильной работы ...