我正在尝试设置LiveServerTestCase。
为此,我使用
在我的测试类中创建用户class ExampleTest(LiveServerTestCase):
user = User.objects.create_superuser('Testuser','test@user.com','1234')
user.save()
.
.
.(rest of the test)
如果没有这一行,服务器和测试就会启动,但很明显它无法登录,因为之前没有创建用户。
但是这条线我得到了
django.core.exceptions.ImproperlyConfigured: settings.DATABASES
is improperly configured. Please supply the NAME value.
错误。
我是否需要在settings.py中为LiveServerTestCase设置服务器,如果是,请使用哪些值或在哪里找到它们?
更新:
我用
运行此测试python manage.py test
所以它设置了一个数据库本身,我不必在settings.py中定义,或者我错了。
UPDATE2:
我已经定义了一个'生产'数据库(在我问问题之前),它看起来像这样:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'HOST': 'localhost', # 10.1.2.41
'NAME': 'pim_testdatabase',
'USER': 'postgres',
'PASSWORD': '1234',
'PORT': '5432',
'HAS_HSTORE': True,
'TEST':{
'NAME': 'test_pim_testdatabase'
},
},
}
仍然出现例外。
答案 0 :(得分:1)
您需要在DATABASES
设置中设置数据库。
Django设置了与每个数据库对应的test database 在设置文件的
DATABASES
定义中定义。默认情况下,测试数据库通过预先
test_
来获取其名称NAME
中定义的数据库的DATABASES
设置的值。
如果要使用其他数据库名称,请在NAME
字典中为TEST
中的任何给定数据库指定DATABASES
。
示例测试数据库配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'USER': 'mydatabaseuser',
'NAME': 'mydatabase',
'TEST': { # test database settings
'NAME': 'mytestdatabase', # test database name
},
},
}
答案 1 :(得分:1)
问题是您是在类定义中创建用户。这在加载测试类时,在创建数据库之前运行。
class ExampleTest(LiveServerTestCase):
user = User.objects.create_superuser('Testuser','test@user.com','1234')
user.save() # This save isn't required -- it has been saved already
您可以通过将用户创建移动到单个测试中来解决问题。然后,在创建数据库之后运行测试方法时将创建用户。
class ExampleTest(LiveServerTestCase):
def test_user(self):
self.user = User.objects.create_superuser('Testuser','test@user.com','1234')
...
Django 1.8有一个setUpTestData
方法,您可以为整个测试用例设置一次初始数据。这样更快,重复性更低。
class ExampleTest(LiveServerTestCase):
@classmethod
def setUpTestData(cls):
# Set up data for the whole TestCase
self.user = User.objects.create_superuser('Testuser','test@user.com','1234')
def test_user(self):
# access the user with self.user
...
在早期版本的Django中没有setUpTestData
,您可以使用setUp
方法创建用户。
class ExampleTest(LiveServerTestCase):
def setUp(self):
self.user = User.objects.create_superuser('Testuser','test@user.com','1234')