Django Fixtures загружается в неверном порядке при тестировании? - PullRequest
7 голосов
/ 26 августа 2010

Я тестирую свое приложение, и у меня возникла проблема, и я не знаю почему. Я загружаю приборы для своих тестов, и у них есть внешние ключи, которые зависят друг от друга. Они должны быть загружены в определенном порядке, иначе он не будет работать.

Установки, которые я загружаю:

["test_company_data", "test_rate_index", 'test_rate_description']

Данные компании являются первыми. test_rate_index имеет внешний ключ к компании, а test_rate_description имеет внешний ключ к модели, объявленной в test_rate_index. (кроме того, для разных испытаний нужны разные приборы, поэтому я не просто запихиваю все в одну)

Если я использую стандартную процедуру django для загрузки тестов, тесты загружаются не в правильном порядке.

class TestPackages(test.TestCase):
    fixtures = ["test_company_data", "test_rate_index", "test_rate_description",]

Я получаю сообщение

DoesNotExist: RateDescription matching query does not exist.

Но если я поменяю порядок своих приборов (что не имеет смысла), это сработает:

fixtures = ["test_rate_description", "test_company_data", "test_rate_index",]

В документации Django говорится, что приборы загружаются в том порядке, в котором они были объявлены, но, похоже, это не так.

В качестве обходного пути вместо использования django's

    call_command('loaddata', *fixtures, **{
                                            'verbosity': 0,
                                            'commit': False,
                                            'database': 'default'
                                         })

Я использую другую функцию в методе setUp, которая загружает приборы по одному.

def load_fixtures(fixtures):
    for fixture in fixtures:
        call_command('loaddata', fixture, **{
                                            'verbosity': 0,
                                            'commit': False,
                                            'database': 'default'
                                            })

Есть ли что-то, что я делаю неправильно или не понимаю, что приводит к тому, что мои приборы не загружаются в правильном порядке при попытке использовать стандартный метод?

1 Ответ

1 голос
/ 26 августа 2010

Документация Django гласит, что приборы загружаются в порядке, в котором они были объявлены, но, похоже, это не так.

Это, конечно, странно.Светильники загружаются в правильном порядке, когда я тестировал один из моих проектов (Django 1.2.1, Python 2.6.2, Postgresql 8.3.11).

Вот что я бы сделал для устранения неполадок.

IsNotExist: Соответствующий запрос RateDescription не существует.

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

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

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

...