Django Fixtures загружаются в неправильном порядке при тестировании?
Я тестирую свое приложение, и у меня возникла проблема, и я не уверен, почему. Я загружаю приборы для своих тестов, и у них есть внешние ключи, которые зависят друг от друга. Они должны быть загружены в определенном порядке, иначе он не будет работать.
Я загружаю светильники:
["test_company_data", "test_rate_index", 'test_rate_description']
Данные компании являются первыми. test_rate_index имеет внешний ключ к компании, а test_rate_description имеет внешний ключ к модели, объявленной в test_rate_index. (кроме того, для разных испытаний нужны разные приспособления, поэтому я не просто совмещаю все в одном)
Если я использую стандартную процедуру django для загрузки тестов, тесты загружаются не в правильном порядке.
Класс TestPackages(test.TestCase): fixtures = ["test_company_data", "test_rate_index", "test_rate_description",]
Я получаю сообщение
DoesNotExist: Соответствующий запрос RateDescription не существует.
Но если я поменяю порядок своих приборов (что не имеет смысла), это сработает:
fixtures = ["test_rate_description", "test_company_data", "test_rate_index",]
Документация Django гласит, что приборы загружаются в порядке, в котором они были объявлены, но, похоже, это не так.
В качестве обходного пути, вместо использования Django's
call_command ('loaddata', * fixtures, **{ "многословие": 0, 'commit': False, "база данных": "по умолчанию" })
Я использую другую функцию в методе setUp, который загружает приборы по одному.
def load_fixtures (fixtures): для крепежа в светильниках: call_command('loaddata', фикстура, **{ "многословие": 0, 'commit': False, "база данных": "по умолчанию" })
Есть ли что-то, что я делаю неправильно или не понимаю, что заставляет мои приборы не загружаться в правильном порядке при попытке использовать стандартный метод?
1 ответ
Документация Django гласит, что приборы загружаются в порядке, в котором они были объявлены, но, похоже, это не так.
Это конечно странно. Светильники загружаются в правильном порядке, когда я тестировал один из моих проектов (Django 1.2.1, Python 2.6.2, Postgresql 8.3.11).
Вот что я бы сделал для устранения неполадок.
DoesNotExist: Соответствующий запрос RateDescription не существует.
Вы получаете эту ошибку при загрузке прибора или при выполнении теста? Можете ли вы найти прибор / код, который поднимает это? Увеличьте многословие, если это будет необходимо.
Можете ли вы попробовать выстрелить
loaddata
команда из командной строки? Вызовите его три раза, передавая имя одного прибора для каждого вызова в правильной ожидаемой последовательности. И посмотри, грузятся ли светильники.Я знаю, что вы, вероятно, уже сделали это, но можете ли вы убедиться, что первое и второе приборы не содержат
RateDescription
данные?