2

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

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

使用 django_nose 的 git 版本,我设法将我的模型正确地创建到测试数据库中,但是它们都是空的,使用 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 Query 日志,事件顺序是

  1. 在测试数据库上做一个同步数据库
  2. 截断每个表(为什么?,这是我的问题所在)
  3. 运行测试

查询日志中的截断示例:

TRUNCATE `django_site`

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


我相信这是最后的更新:

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

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

除了下一步:

  1. 数据被重新插入

    插入django_sitedomainname)值('example.com','example.com')

不知道为什么会发生这种情况,但不是 django_nose

4

2 回答 2

1
  1. sites应用程序在您的INSTALLED_APPS? 鼻子测试运行器扩展了 django 的测试运行器,它应该调用syncdb并获取所有已安装的应用程序。
  2. 你的测试用例是什么样的?django-nose不负责加载您的固定装置(正常的 Django 测试运行器也不负责)。夹具由django.test.TestCase.

编辑:您所描述的所有事情都发生在_fixture_setup()Django 的 TestCase 中。截断等发生在flush然后固定装置被设置。

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

于 2011-08-03T16:20:59.513 回答
0

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

于 2011-08-04T22:24:47.100 回答