我最近在我们的暂存环境中部署了一些损坏的代码。新代码失败Django's system checks(下面再现错误消息,但这个问题更为通用)。我们的单元测试套件运行得很干净。我的问题是:在部署代码之前,确保系统检查运行的正确方法是什么?
最初我猜测测试能够在不执行系统检查的情况下运行,因为我们使用pytest而不是Django的测试运行器。但是,添加一个简单的测试并调用manage.py test
表明Django测试运行器也可以在不执行系统检查的情况下运行。
我的一个想法是在我们的构建管道中运行manage.py check
命令,并且在非零返回值上使构建失败。这种方法的缺点是它会在提交代码之前引入另一个开发人员步骤(例如,除了运行单元测试套件外,还要记住运行manage.py check
。)
另一个想法是添加一个运行系统检查的单元测试。这似乎在技术上是可行的,但它是否与Django的系统检查框架的目的和设计一致?
我注意到the documentation有一节关于编写自定义检查的测试,但这并不能解决我的要求。我没有看到关于将系统检查纳入Django文档中的测试的其他文档。
错误讯息:
SystemCheckError: System check identified some issues:
ERRORS:
myapp.MyCoolModel.linked_groups: (fields.E304) Reverse accessor for 'MyCoolModel.linked_groups' clashes with reverse accessor for 'MyCoolModel.primary_group'.
HINT: Add or change a related_name argument to the definition for 'MyCoolModel.linked_groups' or 'MyCoolModel.primary_group'.
myapp.MyCoolModel.primary_group: (fields.E304) Reverse accessor for 'MyCoolModel.primary_group' clashes with reverse accessor for 'MyCoolModel.linked_groups'.
HINT: Add or change a related_name argument to the definition for 'MyCoolModel.primary_group' or 'MyCoolModel.linked_groups'.
答案 0 :(得分:1)
根据this ticket,没有运行检查以及测试是在1.8版本中引入的回归,并且最近已经修复。
如上所述,一个简单的解决方案似乎是创建自己的test runner,在call_command('check')
的开头插入run_suite()
。有关示例,请参阅actual fix。