【发布时间】:2017-11-28 15:48:34
【问题描述】:
我想使用--keepdb 选项允许在运行测试后保留数据库,因为在我的情况下,创建数据库需要一段时间(但运行测试实际上很快)
但是,我只想保留数据库结构,而不是数据。 每次运行测试时,我都需要一个空数据库。
我知道我可以使用tearDown 方法来删除创建的每个对象,但这是一种乏味且容易出错的方法。
我只需要找到一种方法来告诉 Django 在单元测试结束时刷新整个数据库(而不是销毁它)。
我正在考虑制作一个非常简单的脚本:
- 运行测试保留数据库:
manage.py test --keepdb - 运行
manage.py flushdb --database test_fugodb
但是,通过第二步,我得到了django.db.utils.ConnectionDoesNotExist: The connection test_fugodb doesn't exist。这个测试数据库的名称是什么?我拿了运行测试时显示的那个:
怎么了? 谢谢!
【问题讨论】:
-
无论您在测试中创建什么,django 都不会自动删除。假设您正在使用
python manage.py test运行测试? -
对不起,我最初的帖子不够清楚,我更新了它。 TL/DR:我想使用 --keepdb 来避免每次都创建数据库。
-
部署数据库应该是一个独立于运行测试的步骤。这是“开箱即用”的情况之一。框架开始妨碍您而不是提供帮助,因为它们没有预见到您的用例。最有可能的是,您需要在某处集成一个任务来截断您的数据。
-
@jpmc26 我正在考虑使用
flushdb --database <my-test-db>,但找不到测试数据库的正确名称(参见我编辑的帖子)。谢谢!
标签: python django unit-testing