2016-10-15 25 views
-1

我創建了一個簡單的測試情況是這樣的:Django的UNITEST:表不存在

from unittest import TestCase 
import user_manager 


class UserTest(TestCase): 
    def test_register(self): 
     email = "[email protected]" 
     password = "123456" 
     result, user = user_manager.setup_new_user(email, password) 
     self.assertEqual(result, CodeID.SUCCESS) 

然後我運行測試用例:

python manage.py test users 

而且這裏是日誌:

Creating test database for alias 'default'... 
/Users/admin/Projects/MyApp/venv/lib/python2.7/site-packages/django/db/backends/mysql/base.py:112: Warning: Table 'mysql.column_stats' doesn't exist 
    return self.cursor.execute(query, args) 
Creating test database for alias 'myapp_log'... 
.FE 
====================================================================== 
ERROR: test_register (users.tests.UserTest) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
... 
ProgrammingError: (1146, "Table 'test_myapp.user' doesn't exist") 

因此,它創建了一個測試數據庫,但似乎沒有創建表。這裏是我的數據庫間設置:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': "myapp", 
     'USER': "root", 
     'PASSWORD': "", 
     'HOST': '127.0.0.1', 
     'PORT': '', 
    }, 
    'myapp_log': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': "myapp_log", 
     'USER': "root", 
     'PASSWORD': "", 
     'HOST': '127.0.0.1', 
     'PORT': '', 
    }, 
} 

而且我的模型:

class User(BaseModel): 
    uid = models.IntegerField(primary_key=True) 
    email = models.CharField(max_length=200) 
    password = models.CharField(max_length=200) 
    create_time = models.IntegerField() 
    update_time = models.IntegerField() 
    status = models.IntegerField() 
    social_token = models.CharField(max_length=200) 
    social_app = models.IntegerField() 

    class Meta: 
     db_table = 'user' 

任何人都知道,爲什麼不創建表「用戶」?

UPDATE:從我的測試用例

user_manager會做一些查詢和表用戶添加新的記錄。

我想我運行測試用例時,Django會以某種方式讀取我的模型,並用這些模型中的所有表創建一個測試數據庫。我對嗎?

回答

0

您的測試數據庫需要與生產數據庫不同。一旦測試用例運行,測試數據庫就會被銷燬。在你的情況下,數據庫沒有創建。你應該通過這個文件的詳細信息https://docs.djangoproject.com/en/1.10/topics/testing/overview/ 你能還添加user_manager模塊的片段

+0

我的user_manager做一些查詢並在表User上添加新記錄。所以我應該爲測試創建一個新的數據庫,我認爲django會以某種方式讀取我的模型,創建數據庫並在完成時銷燬? –

+0

在測試文件中,您需要導入要使用的模型,然後定義一個設置方法,您可以在其中創建模型實例並稍後定義您的聲明 –

+0

我發現需要將我的models.py文件添加到我的應用程序文件夾,並創建表。感謝您的幫助@VaibhavSingh –

0

所以我發現我需要把我的models.py在我的用戶文件夾,並添加「用戶」到INSTALL_APPS設置。現在它工作了。