2014-11-14 69 views
0

环境的初始夹具:的Django 1.7:问题加载测试

Django的版本:1.7.1
鼻版本:1.3.4
Django的鼻子版本: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 funcion,我有一个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 

显然它不是同步的所有这些应用程序正在创建只有do的表g,当灯具运行时,它找不到人表。我如何强制测试为所有应用程序创建模型?

在此先感谢您的帮助:)

[编辑]

我改变了标题,并张贴的答案,也许帮助别人同样的问题。

问题不在于同步不会创建所有表,而是错误消息。问题在于django 1.7中不支持的初始数据装置。

+1

听起来像迁移问题。我还没有机会使用Django 1.7迁移,但请确保遵循文档中的建议,我认为这将解决您的问题。 https://docs.djangoproject.com/en/1.7/topics/migrations/ – 2014-11-14 17:00:50

回答

0

好吧,我会回答我的问题:)

我发现了一个bug report在Django的bug跟踪系统:

这个问题不加载夹具,但只是初步数据。

Note that ​initial data isn't supported if an application has migrations. It may be worth throwing a more informative error message though.

因此很明显,有三个选项:

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