【发布时间】:2021-01-29 13:19:17
【问题描述】:
我一直在开发一个 django 应用程序,它通过数据库路由器使用多个数据库,如下所示。我想为使用 Django Rest Framework 开发的 api 编写单元测试用例。
class MultiDbRouter(object):
"""
Router for handling multiple database connections
based on the db configs in the request object
"""
def _multi_db(self):
if hasattr(request_cfg, 'db'):
if request_cfg.db in settings.DATABASES:
return request_cfg.db
else:
raise Http404
else:
return 'default'
def db_for_read(self, model, **hints):
"""
Set database for reading based on request config
"""
if model._meta.app_label == 'survey':
return 'survey'
if model._meta.app_label != 'analytics':
return 'default'
return self._multi_db()
def db_for_write(self, model, **hints):
"""
Set database for writing based on request config
"""
if model._meta.app_label == 'survey':
return 'survey'
if model._meta.app_label != 'analytics':
return 'default'
return self._multi_db()
def allow_relation(self, obj1, obj2, **hints):
"""
allow relation between objects
"""
return True
def allow_syncdb(self, db, model):
"""
allow syncing of database
"""
return True
我已经开始使用 pytest 来编写测试用例,但是当我阅读 pytest-django 库的文档时,它说“目前 pytest-django 不专门支持 Django 的多数据库支持。”
有没有办法解决这个限制?或者我应该使用 pytest-django 以外的其他库来编写单元测试用例?如果有,是哪一个?
理想的前进方式是什么?
提前致谢!
【问题讨论】:
-
正如 pytest 的文档所说,使用 Django 的普通测试类。 Tests and multiple databases - Django docs
-
我读到了,但是 pytest 有什么用呢?我将不得不使用 Django 的 Testcase 编写所有测试用例。
标签: django pytest-django