0

Я пытаюсь настроить некоторые модели в тестовой базе данных, а затем отправить в пользовательскую форму, которая включает в себя загрузку файла.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) 

ответ

2

--keepdb опции означает, что база данныхсохраняются. Это означает, что быстрее запустить тесты еще раз, потому что вам не нужно воссоздавать таблицу.

Однако каждый метод тестирования в классе TestCase выполняется в транзакции, которая откатывается после завершения метода. Использование --keepdb не меняет этого.

Это означает, что ваш объект, созданный в test_create_component, не может быть обнаружен по тесту test_record_exists. Вы можете либо создать объект внутри метода test_record_exists, либо в методе setUp или setUpTestData classmethod.

+0

Любые мысли о том, почему после внесения почтового запроса в методе test_csv_import не видны записи базы данных, которые создаются? Я хочу проверить, правильно ли загружен файл, а затем использовать затем обработать файл определенным образом. А также, ответ на вопрос 200? –

+0

После выполнения запроса на почту в методе 'test_csv_import' вам необходимо проверить создание объекта ** внутри ** на тот же метод - как только метод завершит выполнение, транзакция будет откат, а все созданные объекты исчезнут. Ответ 200 не означает, что объект был создан - ответ может быть ошибкой, говоря, что данные сообщения были недействительными. – Alasdair

Смежные вопросы