2012-07-22 20 views
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

回答

5

發現在另一個線程解決方案,answer from John Mee

# 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 

使用單元測試我只固定數據加載失敗,這是不是非常有幫助的信息。

最後我工作的測試看起來像這樣:

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) 
1

在測試用例中加載fixture時,我不認爲Django允許您包含目錄名稱。試着改變你的fixtures設置:

fixtures = ['core_fixture.json',] 

您可能需要改變你的FIXTURE_DIRS設置爲好,包括core目錄。

如果您在verbose mode中運行測試,您將看到Django嘗試加載的fixture文件。這應該可以幫助您調試您的配置。

python manage.py test -v 2 
+0

感謝您的建議。我在FIXTURE_DIRS中也包含了核心目錄。儘管我仍然可以使用loaddata命令加載燈具,但運行測試時出現以下錯誤:檢查是否可以正確加載初始數據...失敗 – 2012-07-23 07:31:13

+0

這可能與我的模型信號和數據衝突有關。然而,我不會用「if not kwargs.get('raw',False):」執行loaddata命令的信號,這個信號可能是在加載測試集中的燈具時執行的。會檢查它。 – 2012-07-23 08:02:55

1

確保你有你的應用程序中INSTALLED_APPS列出您的應用包含models.py文件。