0

环境:

Django 版本:1.7.1
鼻子版本:1.3.4
django-nose 版本:1.2

我有两个应用程序:
狗和人类

该模型具有:

class Dog(models.Model):
    human = models.ForeignKey('humans.Human', null=False)

    def askFood(human):
       ...

人类

并且在模型中有一个类似于人类示例属性的函数,比如

name = models.CharField(_('Name'), null=False, max_length=120)

这两个应用程序在设置文件中的 INSTALLED_APPS 中列出。

FIXURE_DIRS 如下:

FIXTURE_DIRS = (
    os.path.join(os.path.dirname(__file__), '../**/tests'),
)

测试在狗应用程序的测试文件夹中。

我在狗应用程序中有一个测试来测试 askFood 功能,并且我有一个带有人类的 JSON 固定装置(initial_data)。

[
    {
        "pk": 1,
        "model": "human.Human",
        "fields": {
            "name": "Test"
        }
    },
]

测试是:

class DogFixtureTestCase(TestCase):
    fixtures = ['./initial_data.json']

class TestFixtureDog(DogFixtureTestCase):
    def test_ask_food(self):
        ...

我执行命令进行测试:

python manage.py test dog

有一个错误:

no such table: dog_dog

显然它没有同步所有的应用程序,它只创建狗的桌子,当夹具运行时它找不到人类桌子。如何强制测试为所有应用程序创建模型?

在此先感谢您的帮助 :)

[编辑]

我更改了标题并发布了一个答案,也许可以帮助遇到同样问题的人。

问题不在于同步不会创建所有表,错误消息具有误导性。问题在于 django 1.7 不再支持的初始数据夹具。

4

1 回答 1

0

好的,我来回答我的问题:)

我在 django 的 bug tracker 中发现了一个bug 报告:

问题不在于加载夹具,而在于加载初始数据。

请注意,如果应用程序有迁移,则不支持初始数据。不过,可能值得抛出更多信息的错误消息。

所以显然有三种选择:

  • 将夹具迁移到新的“数据迁移”。
  • 使用单元测试的设置以编程方式加载数据。
  • 不要从灯具的“路径”中自动加载 inital_data.json(删除 initial_data.json)。问题是加载初始数据而不是固定装置。
于 2014-11-17T12:04:22.983 回答