Как запустить тест django на пустой базе данных вне тестового бегуна?
Наша база данных принимает файлы загрузки, присланные пользователями, и на данный момент наши администраторы собираются загружать присланные файлы вручную для решения проблем с данными. Существует 2 типа файлов. Чтобы второй файл успешно загрузился, первый файл должен успешно загрузиться. Поскольку мы собираемся заниматься этим самостоятельно, я пишу страницу проверки данных, которая загружает первый файл в режиме отладки, чтобы пользователь мог решить такие простые вопросы, как уникальные поля и контролируемая лексика.
Но для того чтобы протестировать второй файл, мне нужно временно загрузить первый файл. Я решил сделать это, создав класс TestCase, который не является частью нашего набора модульных тестов. (Возможно, есть лучший способ сделать это, чем выбранная мной стратегия - так что я открыт для предложений.)
Когда я запускаю тесты из представления валидации в views.py
, тесты работают, и данные не сохраняются в базе данных - однако я не получаю чистую/пустую тестовую базу данных для работы. Чтобы этот код гарантированно работал, мне нужно выяснить, как создать свежую пустую копию тестовой базы данных. Я нашел этот пост о стеках , но я не могу заставить предложение в ответе работать. Даже если я вызываю setup_test_environment()
, тестовая база данных все равно заполняется в самом начале (если это вообще тестовая копия базы данных). Может быть, я вызываю setup_test_environment()
не из того места?
Вот что у меня есть:
views.py
class DataValidationView(FormView):
form_class = DataSubmissionValidationForm
...
def form_valid(self, form):
...
# Load the animal and sample data into a test database, so the data is available for the accucor file validation
validation_test = self.ValidationTest()
try:
validation_test.validate_animal_sample_table(self.animal_sample_file.temporary_file_path())
except Exception as e:
valid = False
# Load the accucor file into a temporary test database in debug mode
for af in self.accucor_files:
try:
validation_test.validate_accucor(af.temporary_file_path())
except Exception as e:
valid = False
...
class ValidationTest(TestCase):
def __init__(self):
setup_test_environment()
self.setUpTestData()
@classmethod
def setUpTestData(cls):
# Tried this in 2 places...
setup_test_environment()
def validate_animal_sample_table(self, animal_sample_file, table_headers):
call_command("load_animals_and_samples",...)
def validate_accucor(self, accucor_file):
call_command("load_accucor_msruns",...)