Django_nose不加载基本灯具,例如django_site example.com条目或管理员权限

时间:2011-08-03 15:56:27

标签: django unit-testing django-nose

使用当前稳定的django_nose(0.1.3),模型甚至没有正确找到并加载,运行测试时出现以下异常:

django.db.utils.DatabaseError: (1146, "Table 'test_appdatabase.django_site' doesn't exist")

使用gj版本的django_nose我设法将我的模型正确地创建到测试数据库中,但它们都是空的,使用Django的testrunner我将一些基本数据加载到表中,例如django_site和auth_permission表:

django_site
id      domain  name
1       example.com     example.com

当我运行安装和设置django_nose的测试套件时,我得到以下异常:

DoesNotExist: Site matching query does not exist.

任何想法?


更新:使用-v 2运行,似乎它正在运行应用程序的后同步处理程序(syncdb)

Running post-sync handlers for application sites
Creating example.com Site object
Adding content type 'sites | site'
Adding permission 'sites | site | Can add site'
Adding permission 'sites | site | Can change site'
Adding permission 'sites | site | Can delete site'

所以似乎是在添加它们,但它们正被删除。


进一步更新:

查看MySQL查询日志,事件序列为

  1. 在测试数据库上执行syncdb
  2. 截断每一张桌子(为什么?,这就是我的问题所在)
  3. 运行测试
  4. 查询日志中的示例截断:

    TRUNCATE `django_site`
    

    为什么表被截断了?是否这样测试不会相互污染,有没有办法禁用它?


    我相信这是最后的更新:

    使用标准的django跑步者,同样的事情发生了,

    1. 表已创建
    2. 后同步插入数据
    3. 表格被截断
    4. 更改表调用以设置AUTO_INCREMENT = 1
    5. 除了下一步:

      1. 将数据插回

        INSERT INTO django_sitedomainname)VALUES('example.com','example.com')

      2. 不确定为什么会发生这种情况,而不是django_nose

2 个答案:

答案 0 :(得分:1)

  1. sites中的INSTALLED_APPS应用是?鼻子测试运行器扩展了django的测试运行器,它应该调用syncdb并拿起所有已安装的应用程序。
  2. 您的测试用例是什么样的? django-nose不负责加载你的灯具(两者都不是正常的Django测试运行器)。夹具由django.test.TestCase加载。
  3. 编辑: 你所描述的所有内容都发生在Django的TestCase的_fixture_setup()中。截断等发生在flush中,然后设置了固定装置。

    https://github.com/django/django/blob/master/django/test/testcases.py#L258

答案 1 :(得分:0)

https://github.com/jbalogh/django-nose/issues/39中显示的差异解决了这个问题。