Загружаются ли Django Fixtures в неправильном порядке при тестировании?

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

Я загружаю следующие устройства:

["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",]

I получить сообщение

DoesNotExist: RateDescription matching query does not exist.

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

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

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

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

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

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

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

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

7
задан Aaron 26 August 2010 в 15:03
поделиться

1 ответ

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

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

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

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

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

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

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

1
ответ дан 7 December 2019 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: