在多个数据库上的Django单元测试

use*_*404 5 django multiple-databases

我正在一个django项目中,我所有的单元测试用例都运行良好。

当我引入第二个数据库后,我从TestCase继承的所有测试用例都被破坏了。在这个阶段,我还没有为第二个数据库建立任何测试用例,但是我的路由器工作正常。

当我运行测试时,我得到了错误,

“ KeyError:'SUPPORTS_TRANSACTIONS'”

在我看来,这是在尝试检查确保我安装的所有数据库都支持事务,但从未创建第二个数据库。

关于如何使用测试脚本来构建第二个数据库的任何想法。

far*_*dav 5

我意识到这是一个很旧的线程,但是我遇到了同样的问题,我的决心是将multi_db = True标志添加到我的测试用例中,例如:

class TestThingWithMultipleDatabases(TestCase):
     multi_db = True

     def test_thing(self):
         pass
Run Code Online (Sandbox Code Playgroud)

来源https://github.com/django/django/blob/master/django/test/testcases.py#L861

这将导致django调用flush所有数据库(如果支持事务则回滚)

我也正在使用数据库路由器

恐怕我在Django的文档中找不到这个,所以没有链接

  • 自 django 2.2 起,`multi_db` 已被弃用,改用 [TestCase.databases](https://docs.djangoproject.com/en/2.2/topics/testing/tools/#multi-database-support)。 (5认同)

How*_*ard 4

是的,我有一个类似的问题...我的解决方法是设置 'SUPPORTS_TRANSACTIONS': True 对于设置文件中的每个数据库连接。不确定这是否是修复它的正确方法,但它对我有用。