问题:
问题是我有一个工作正常的应用程序,但是当我尝试使用命令运行测试时:
coverage run manage.py test --settings=crm.settings.test
在开始时出现错误:
Creating test database for alias 'default'...
IntegrityError: profiles_usermodel.current_project_id may not be NULL
以前我跑过测试,一切都很顺利。然后我显着改变了模型和应用程序并尝试运行测试 - 结果我得到了上面提到的问题。我做错了什么?
我的设置:
我有单独的测试设置:
My_application
|___My_application
|___urls.py
|___ __init__.py
|___wsgi.py
|___settings
|___base.py
|___test.py
|___local.py
|___profiles
|___models.py
|___views.py
|___tests
|___ __init__.py
|___models.py
测试设置如下:
"""Local test settings and globals which allows us to run our
test suite locally."""
from .base import *
########## TEST SETTINGS
TEST_RUNNER = 'discover_runner.DiscoverRunner'
TEST_DISCOVER_TOP_LEVEL = PROJECT_ROOT
TEST_DISCOVER_ROOT = PROJECT_ROOT
TEST_DISCOVER_PATTERN = "*"
########## IN-MEMORY TEST DATABASE
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": ":memory:",
"USER": "",
"PASSWORD": "",
"HOST": "",
"PORT": "",
},
}
INSTALLED_APPS += ('coverage',)
还有来自My_application/profiles/models.py
的模型(省略了几个字段和方法):
from django.db import models
from django.contrib.auth.models import (
BaseUserManager, AbstractBaseUser, PermissionsMixin )
from django.contrib.auth.models import Group
class Project(models.Model):
name = models.CharField(max_length=255)
class UserModel(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=255, unique=True, db_index=True,)
current_project = models.ForeignKey(Group, related_name='usermodel_current')
USERNAME_FIELD = 'email'
我也使用South进行数据库迁移和django 1.5c2。
答案 0 :(得分:0)
错误很明显。
测试运行器正在尝试创建数据库,并将记录插入“profiles_usermodel”。此插入失败,因为字段'current_project'不能为null,但创建过程没有在该字段中设置任何内容。
我们必须看到你的测试,以准确缩小发生的位置。
如果您不关心让它正常工作并且只是希望它能够正常工作,请更新您的用户模型,并将null=True
添加到UserModel.current_project
的kwargs。