Я тестирую свое приложение, и у меня возникла проблема, и я не уверен, почему. Я загружаю фикстуры для своих тестов, и у них есть внешние ключи, которые полагаются друг на друга. Они должны быть загружены в определенном порядке, иначе это не сработает.
Я загружаю следующие устройства:
["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' })
Есть ли что-то, что я делаю неправильно или не понимаю, из-за чего мои приборы не загружаются в правильном порядке при попытке использовать стандартный метод?
В документации Django указано, что фикстуры загружаются в том порядке, в котором они объявлены, но, похоже, это не так.
Это, конечно, странно. Фикстуры загружаются в правильном порядке, когда я тестировал один из своих проектов (Django 1.2.1, Python 2.6.2, Postgresql 8.3.11).
Вот что я сделал бы для устранения неполадок.
DoesNotExist: соответствующий запрос RateDescription не существует.
Вы получаете эту ошибку при загрузке прибора или выполнении теста? Можете ли вы найти приспособление/код, который поднимает это? При необходимости увеличьте детализацию.
Можете попробовать запустить команду loaddata
из командной строки? Вызовите его три раза, передавая имя одного прибора для каждого вызова в правильной ожидаемой последовательности. И посмотрите, загружаются ли приборы.
Я знаю, что вы, вероятно, уже сделали это, но можете ли вы убедиться, что первое и второе фикстуры не содержат никаких данных RateDescription
?