我創建了一個簡單的測試情況是這樣的: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會以某種方式讀取我的模型,並用這些模型中的所有表創建一個測試數據庫。我對嗎?
我的user_manager做一些查詢並在表User上添加新記錄。所以我應該爲測試創建一個新的數據庫,我認爲django會以某種方式讀取我的模型,創建數據庫並在完成時銷燬? –
在測試文件中,您需要導入要使用的模型,然後定義一個設置方法,您可以在其中創建模型實例並稍後定義您的聲明 –
我發現需要將我的models.py文件添加到我的應用程序文件夾,並創建表。感謝您的幫助@VaibhavSingh –