當我運行單元測試時,Django 1.6似乎沒有創建一個空白數據庫來測試,我不明白爲什麼。 Django docs表示Django不使用您的生產數據庫,而是創建一個單獨的空白數據庫進行測試。但是,當我調試我的測試'test_get_user_ids'並運行命令'UserProxy.objects.all()'時,我看到了生產數據庫中的所有用戶。現在我明白了,這個特定的測試會失敗,因爲我沒有將每個UserProxy實例保存到數據庫,因此也不會生成測試的id。但事實是,當我查詢UserProxy時,我仍然可以看到我生產數據庫中的所有用戶,我希望它們是空的。這是爲什麼發生?爲什麼Django在測試期間不創建空白數據庫?
BTW,我正在使用nosetest測試: 「nosetests -s apps.profile.tests.model_tests.py:UserProxyUT」
感謝。
# settings.py
DATABASES = {
'default': {
# Enable PostGIS extensions
'ENGINE' : 'django.contrib.gis.db.backends.postgis',
'NAME' : 'myapp',
'USER' : 'myappuser',
'PASSWORD': 'myapppw',
'HOST' : 'localhost',
'PORT' : '',
}
}
# apps/profile/models.py
from django.contrib.auth.models import User
class UserProxy(User):
"""Proxy for the auth.models User class."""
class Meta:
proxy = True
@staticmethod
def get_user_ids(usernames):
"""Return the user ID of each username in a list."""
user_ids = []
for name in usernames:
try:
u = User.objects.get(username__exact=name)
user_ids.append(u.id)
except ObjectDoesNotExist:
logger.error("We were unable to find '%s' in a list of usernames." % name)
return user_ids
# apps/profile/tests/model_tests.py
from django.contrib.auth.models import User
from django.test import TestCase
from apps.profile.models import UserProxy
class UserProxyUT(TestCase):
def test_get_user_ids(self):
debug()
# UserProxy.objects.all() shows usernames from my production database!
u1 = UserProxy(username='user1')
u2 = UserProxy(username='user2')
u3 = UserProxy(username='user3')
usernames = [u1, u2, u3]
expected = [u1.id, u2.id, u3.id]
actual = UserProxy.get_user_ids(usernames)
self.assertEqual(expected, actual)
你確定你沒有存儲爲一個固定的生產DB數據? –
同時顯示'DATABASES'設定值。謝謝。 – alecxe
@alecxe,對不起。所示。 – William