'IntegrityError: имя пользователя столбца не уникально' при использовании модели Django User в тесте - PullRequest
2 голосов
/ 07 июня 2011

Во время выполнения некоторых тестов я начал получать ошибку IntegrityError в моей функции setUp.Вот мой код:

def setUp(self):
    self.client = Client()

    self.emplUser = User.objects.create_user('employee@email.com', 'employee@email.com', 'nothing')
    self.servUser1 = User.objects.create_user('thebestcompany@email.com', 'thebestcompany@email.com', 'nothing')
    self.servUser2 = User.objects.create_user('theothercompany@email.com', 'theothercompany@email.com', 'nothing')
    self.custUser1 = User.objects.create_user('john@email.com', 'john@email.com', 'nothing')
    self.custUser2 = User.objects.create_user('marcus@email.com', 'marcus@email.com', 'nothing')

    ... save users here ...

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

Это начало происходить только полчаса назад, на ровном месте.Кто-нибудь сталкивался с решением этой проблемы?

Ответы [ 2 ]

1 голос
/ 23 января 2013

Я уверен, что вы больше не страдаете этой проблемой с тех пор, как написали 18 месяцев назад, но у меня тоже была эта проблема, и я наконец понял, что происходит.При использовании Postgres для тестовых случаев изменения БД выполняются в транзакции и просто откатываются, поэтому нет необходимости явно очищать таблицы в tearDown(), однако в SQLite это необходимо.

0 голосов
/ 01 октября 2014

Поздний, но более подходящий ответ, для людей, которые окажутся там после поиска в Google:

Когда в ваших тестах есть взаимодействие с базой данных (обычно при создании экземпляров модели), вы должны создать подкласс своего тестакласс из django.test.TestCase, который очищает базу данных после каждого теста.

Тогда вам не нужно писать утомительный метод tearDown во всех ваших тестовых классах.

См. https://docs.djangoproject.com/en/dev/topics/testing/overview/#writing-tests

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...