Я пытаюсь настроить некоторые модели в тестовой базе данных, а затем отправить в пользовательскую форму, которая включает в себя загрузку файла.Django test client, не создавая модели (используется опция -keepdb)
В базе данных ничего не сохраняется, и я не уверен, почему тест, когда я выполняю POST, отправляет ответ 200? С follow = False, разве это не должно быть 302?
Кроме того, когда я пытаюсь найти модель в базе данных, она ничего не находит.
И когда я смотрю базу данных при использовании опции -keepdb, ничего не существует?
Что я делаю неправильно?
class ImportTestCase(TestCase):
remote_data_url = "http://test_data.csv"
local_data_path = "test_data.csv"
c = Client()
password = "password"
def setUp(self):
utils.download_file_if_not_exists(self.remote_data_url, self.local_data_path)
self.my_admin = User.objects.create_superuser('jonny', '[email protected]', self.password)
self.c.login(username=self.my_admin.username, password=self.password)
def test_create_organisation(self):
self.o = Organization.objects.create(**{'name': 'TEST ORG'})
def test_create_station(self):
self.s = Station.objects.create(**{'name': 'Player', 'organization_id': 1})
def test_create_window(self):
self.w = Window.objects.create(**{'station_id': 1})
def test_create_component(self):
self.c = Component.objects.create(**{
'type': 'Player',
'window_id': 1,
'start': datetime.datetime.now(),
'end': datetime.datetime.now(),
'json': "",
'layer': 0}
)
def test_csv_import(self):
"""Testing that standard csv imports work"""
self.assertTrue(os.path.exists(self.local_data_path))
with open(self.local_data_path) as fp:
response = self.c.post('/schedule/schedule-import/create/', {
'component': self.c,
'csv': fp,
'date_from': datetime.datetime.now(),
'date_to': datetime.datetime.now()
}, follow=False)
self.assertEqual(response.status_code, 200)
def test_record_exists(self):
new_component = Component.objects.all()
self.assertTrue(len(new_component) > 0)
И результаты теста
Using existing test database for alias 'default'...
.....[]
F
======================================================================
FAIL: test_record_exists (schedule.tests.ImportTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests.py", line 64, in test_record_exists
self.assertTrue(len(new_component) > 0)
AssertionError: False is not true
----------------------------------------------------------------------
Ran 6 tests in 1.250s
FAILED (failures=1)
Любые мысли о том, почему после внесения почтового запроса в методе test_csv_import не видны записи базы данных, которые создаются? Я хочу проверить, правильно ли загружен файл, а затем использовать затем обработать файл определенным образом. А также, ответ на вопрос 200? –
После выполнения запроса на почту в методе 'test_csv_import' вам необходимо проверить создание объекта ** внутри ** на тот же метод - как только метод завершит выполнение, транзакция будет откат, а все созданные объекты исчезнут. Ответ 200 не означает, что объект был создан - ответ может быть ошибкой, говоря, что данные сообщения были недействительными. – Alasdair