Django Unitest:表格不存在

lnlaulya  于 2022-11-19  发布在  Go
关注(0)|答案(2)|浏览(154)

我创建了一个简单的测试用例,如下所示:

from unittest import TestCase
import user_manager

class UserTest(TestCase):
    def test_register(self):
        email = "dung7@gmail.com"
        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'

有人知道为什么没有创建表“user”吗?
最新消息:
我测试用例中user_manager将执行一些查询并在表user上添加新记录。
我想当我运行测试用例的时候,Django会读取我的模型,并创建一个测试数据库,里面包含所有来自这些模型的表,我说的对吗?

zpf6vheq

zpf6vheq1#

所以我发现我需要把我的www.example.com放在models.py我的用户文件夹中,并将“用户”添加到INSTALLED_APPS设置中。现在它成功了。

nnvyjq4y

nnvyjq4y2#

您的测试数据库必须与生产数据库不同。测试数据库在运行测试用例后会被销毁。在您的情况下,数据库没有创建。您应该阅读此文档以了解详细信息https://docs.djangoproject.com/en/1.10/topics/testing/overview/您还可以添加user_manager模块的代码片段吗

相关问题