0

我試圖在測試數據庫中設置一些模型,然後張貼到包含文件上傳的自定義窗體。Django測試客戶端,不創建模型(--keepdb選項正在使用)

在數據庫中似乎沒有任何東西存在,我不確定爲什麼執行POST時的測試正在發回200響應?跟着= 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選項意味着數據庫保持。這意味着再次運行測試會更快,因爲您不必重新創建表。s

但是,TestCase類中的每個測試方法都在事務中運行,該事務在方法結束後回滾。使用--keepdb不會改變這一點。

這意味着您在test_create_component中創建的對象將不會被test_record_exists測試看到。您可以在test_record_exists方法或setUp方法或setUpTestData classmethod中創建對象。

+0

在test_csv_import方法中發出發佈請求後,爲什麼沒有看到任何正在創建的數據庫記錄?我想測試文件是否正確上傳,然後使用特定方式處理文件。而且,200的回答是否正確? –

+0

在'test_csv_import method'中發出post請求之後,您需要在**方法中檢查對象創建** - 一旦方法運行完畢,事務就會回滾,任何創建的對象都會消失。 200響應並不意味着該對象已創建 - 響應可能是一個錯誤,說明發布數據無效。 – Alasdair

相關問題