5

初期データが正しくロードされているかどうかをチェックする単体テストを作成しました。ただし、Node.objects.all().count()常に0を返すため、フィクスチャがまったくロードされていないように見えます。フィクスチャがロードされていないという出力/エラーメッセージはコマンドラインにありません。

from core.models import Node

class NodeTableTestCase(unittest.TestCase):
    fixtures = ['core/core_fixture.json']
    def setUp(self):
        print "nothing to prepare..."

    def testFixture(self):
        """Check if initial data can be loaded correctly"""
        self.assertEqual(Node.objects.all().count(), 14) 

フィクスチャcore_fixture.jsonには14個のノードが含まれており、次のコマンドを使用して、このフィクスチャをデータベースへの初期データロードとして使用しています。

python manage.py loaddata core/core_fixture.json

それらは、settings.py設定で指定したフォルダーにありますFIXTURE_DIRS

4

3 に答える 3

5

別のスレッドで解決策を見つけました、ジョンミーからの回答

# Import the TestCase from django.test:

# Bad:  import unittest
# Bad:  import django.utils.unittest
# Good: import django.test

from django.test import TestCase

class test_something(TestCase):
    fixtures = ['one.json', 'two.json']
    ...

これを行うと、外部キーに違反しているという適切なエラーメッセージが表示され、アプリ「auth」のフィクスチャも含める必要がありました。このコマンドで必要なデータをエクスポートしました:

manage.py dumpdata auth.User auth.Group > usersandgroups.json

Unittestを使用すると、フィクスチャデータのロードに失敗したというメッセージしか表示されませんでしたが、あまり役に立ちませんでした。

最後に、私の作業テストは次のようになります。

from django.test import TestCase

class NodeTableTestCase2(TestCase):
    fixtures = ['auth/auth_usersandgroups_fixture.json','core/core_fixture.json']

    def setUp(self):
        # Test definitions as before.
        print "welcome in setup: while..nothing to setup.."

    def testFixture2(self):
        """Check if initial data can be loaded correctly"""
        self.assertEqual(Node.objects.all().count(), 11)  
于 2012-07-23T08:52:54.327 に答える
1

テストケースにフィクスチャをロードする場合、Djangoでディレクトリ名を含めることはできないと思います。fixtures設定を次のように変更してみてください。

fixtures = ['core_fixture.json',]

ディレクトリFIXTURE_DIRSを含めるために、設定も変更する必要がある場合があります。core

テストを冗長モードで実行すると、Djangoがロードしようとするフィクスチャファイルが表示されます。これは、構成のデバッグに役立ちます。

python manage.py test -v 2
于 2012-07-22T21:49:34.703 に答える
1

アプリがリストされINSTALLED_APPSていることと、アプリにmodels.pyファイルが含まれていることを確認してください。

于 2014-07-03T15:46:54.940 に答える