测试期间没有加载夹具

时间:2012-07-22 21:22:31

标签: django unit-testing fixtures

我写了一个单元测试,检查初始数据是否正确加载。但是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个节点,我使用此夹具作为初始数据加载到db中,使用以下命令:

python manage.py loaddata core/core_fixture.json

它们位于我在settings.py设置FIXTURE_DIRS中提供的文件夹中。

3 个答案:

答案 0 :(得分: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

使用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)  

答案 1 :(得分:1)

在测试用例中加载fixture时,我认为Django不允许你包含目录名。尝试将fixtures设置更改为:

fixtures = ['core_fixture.json',]

您可能还必须更改FIXTURE_DIRS设置,以包含core目录。

如果在verbose mode中运行测试,您将看到Django尝试加载的fixture文件。这应该可以帮助您调试配置。

python manage.py test -v 2

答案 2 :(得分:1)

确保您的应用已在INSTALLED_APPS中列出,并且您的应用包含models.py文件。