我安装了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'的表)不存在。
关于为什么只测试模型没有加载的任何想法?
答案 0 :(得分:0)
一种解决方法是将__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]