django 1.7:加载测试的初始夹具时出现问题

时间:2014-11-14 13:42:01

标签: python django testing django-nose

环境:

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'),
)

测试位于狗应用程序的tests文件夹中。

我在dog应用程序中测试了askFood函数,我有一个JSON fixture(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不再支持初始数据夹具。

1 个答案:

答案 0 :(得分:0)

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

我在django的bug跟踪器中找到了bug report

问题不是加载灯具,而只加载初始数据。

  

请注意,如果应用程序具有迁移,则不支持初始数据。尽管如此,可能值得提供更多信息性错误消息。

显然有三种选择:

  • 将灯具迁移到新的" Data Migrations"。
  • 使用单元测试的setUp以编程方式加载数据。
  • 不要自动加载inital_data.json(删除initial_data.json)"路径"固定装置问题是加载初始数据而不是装置。