0

問題:

問題は、正常に動作するアプリケーションがあることですが、次のコマンドを使用してテストを実行しようとすると、次のようになります。

 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'

また、dbの移行とdjango1.5c2にはSouthを使用しています。

4

1 に答える 1

0

エラーはかなり明白です。

テスト ランナーはデータベースを作成しようとしており、'profiles_usermodel' にレコードを挿入しようとしています。フィールド 'current_project' を null にすることはできないため、この挿入は失敗しますが、作成プロセスはそのフィールドに何も設定していません。

これが発生している場所を正確に絞り込むには、テストを確認する必要があります。

「正しく」動作させることを気にせず、単に動作させたい場合は、ユーザー モデルを更新null=Trueし、 の kwargs に追加しUserModel.current_projectます。

于 2013-02-25T06:59:05.073 に答える