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 не существует.

  1. Вы получаете эту ошибку при загрузке прибора или при выполнении теста? Можете ли вы найти прибор / код, который поднимает это? Увеличьте многословие, если это будет необходимо.

  2. Можете ли вы попробовать выстрелить loaddata команда из командной строки? Вызовите его три раза, передавая имя одного прибора для каждого вызова в правильной ожидаемой последовательности. И посмотри, грузятся ли светильники.

  3. Я знаю, что вы, вероятно, уже сделали это, но можете ли вы убедиться, что первое и второе приборы не содержат RateDescription данные?

Другие вопросы по тегам