如何让Factory Boy正确连接Django测试数据库?配置后报错连接不存在怎么办
问题根因
factory.django.DjangoModelFactory Meta类中的database参数接收的是Django DATABASES配置中的连接别名,而非实际的数据库名称。
你的配置里仅定义了default这一个数据库连接别名,TEST_DB_NAME是default连接下测试环境专属的数据库名,不属于连接别名,因此直接配置database = 'TEST_DB_NAME'会触发连接不存在的报错。
解法
正常运行Django测试套件时,Django会自动将default连接的实际数据库切换为你配置的TEST.NAME(即TEST_DB_NAME),完全不需要额外给工厂类指定database参数,直接删除工厂类Meta中的database = 'TEST_DB_NAME'配置即可。
此时工厂默认使用default连接,测试环境下会自动写入测试库,不会操作生产主库。
多数据库场景扩展
如果你后续有多数据库拆分需求,在DATABASES中配置了其他连接别名(例如名为statistics的统计库),才需要在工厂Meta中配置database = 'statistics',且只需给对应连接添加TEST配置项,Django测试时同样会自动切换到对应测试库。
内容的提问来源于stack exchange,提问作者Bruno Costa
相关产品推荐
相关产品推荐

