Тестирование Django: Как получить базу данных с ТОЛЬКО данными о приборах и без IntegrityErrors (путем диагностики источника ошибок)? - PullRequest
0 голосов
/ 07 декабря 2011

Я пытаюсь запустить тесты с данными приборов и получаю печально известную ошибку IntegrityError: column user_id is not unique.

Теперь, глядя на мои приборы, я вижу, что идентификаторы моих пользовательских моделей в моем прибореуникальны между собой.Я делаю вывод, что конфликт происходит с существующими данными в (не тестовой) базе данных.Это правильно?( Редактировать: Это кажется неправильным - см. Ниже)

Я хочу иметь возможность точно контролировать, какие данные доступны для моих тестов.Есть ли способ запретить загрузчику тестов django загружать данные из моей действующей базы данных, а также данные о моих приборах?( Редактировать: Да - см. Ответ Тибо).

Редактировать: Переключение на использование чистой базы данных в памяти, согласно ответу Тибо, не решает проблему.Соответственно, я делаю вывод, что моя существующая база данных dev не является проблемой.

Итак, у меня третий вопрос: Как мне диагностировать причину ошибки IntegrityError при загрузке приборов во время тестирования? (И как мне это исправить?)

Редактировать 2: Решение моей проблемы, помимо запуска с чистой базой данных (согласно Thibault J), также заключалось в исключении моделей из установленныхприложения, ссылающиеся на пользователя, до тех пор, пока ошибка не исчезнет.

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

1 Ответ

0 голосов
/ 07 декабря 2011

Используйте другую базу данных для тестирования и тестирования (хорошая практика). В settings.py:

if 'test' in sys.argv:                                                          
    try:                                                                        
        from test_settings import *                                             
    except ImportError:                                                         
        pass

В test_settings.py:

DATABASES = {                                                                   
    'default': {                                                                
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'memory://testdb',
    }                                                                           
}
...