Django-nose在测试运行期间没有创建仅测试模型

时间:2012-07-30 22:55:35

标签: django-nose

我安装了django-nose 1.0作为Django 1.3.1项目的测试运行器。我正在按照on the pypi page关于仅测试模型的说明进行操作。

这是我的settings.py testrunner配置:

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'

我使用这个testrunner进行了几个月的测试没有问题。现在我正在尝试测试一个抽象类,我正在使用一个仅测试模型,但我写的具体测试会引发错误。

根据文档,我只需要将测试类包含在测试期间导入的其中一个文件中。我把测试放在'tests'文件夹中,并分成几个较小的测试文件。这是我的tests / model_tests.py(出于工作原因故意重命名的模型和应用程序):

from django.tests import TestCase
from myapp.models import AbstractFoo

class Foo(AbstractFoo):
    pass


class TestFoo(TestCase):
    def setUp(self):
        self.foo = Foo.objects.create(name="Tester", 
                                      description="This is a test", ...)
    ... [tests follow]

我在setUp的第一行收到错误:

DatabaseError: relation "tests_foo" does not exist
LINE 1: INSERT INTO "tests_foo" ("name", "description", "display...

如果我在测试中设置了一个断点并检查数据库,则表'tests_foo'(或名称中包含'foo'的表)不存在。

关于为什么只测试模型没有加载的任何想法?

2 个答案:

答案 0 :(得分:0)

是的,似乎这仍然是一个问题。用django == 1.6和django-nose == 1.3

看到它

一种解决方法是将__init__.py中的所有模型放入tests/文件夹

关于GitHub的相关问题:django-nose/issues/77

答案 1 :(得分:0)

您需要在测试数据库中创建模型,为此,您需要手动生成迁移或在数据库中创建表。您可以查看我对第二个变种https://github.com/erm0l0v/django-fake-model

的实施情况

此代码应该按预期工作:

from django.tests import TestCase
from myapp.models import AbstractFoo

from django_fake_model import models as f


class Foo(f.FakeModel, AbstractFoo):
    pass


@Foo.fake_me
class TestFoo(TestCase):
    def setUp(self):
        self.foo = Foo.objects.create(name="Tester", 
                                      description="This is a test", ...)
    ... [tests follow]