Django-Q 设置 Q_CLUSTER 'sync': True 不适用于单元测试

Posted

技术标签:

【中文标题】Django-Q 设置 Q_CLUSTER \'sync\': True 不适用于单元测试【英文标题】:Django-Q set Q_CLUSTER 'sync': True doesn't work for unit testsDjango-Q 设置 Q_CLUSTER 'sync': True 不适用于单元测试 【发布时间】:2020-01-01 10:56:16 【问题描述】:

我正在使用 Django-Q 通过 Django 2.2、DRF 3.9 和 Postgres 10.9 发送异步电子邮件

除了单元测试外,设置工作正常。 我指的是以下问题,这与我面临的完全相同: https://github.com/Koed00/django-q/issues/266

根据链接,解决方案之一是将同步设置更改为“真”以进行测试。

这就是我在 tests.py 中的内容:

from django.conf import settings
settings.Q_CLUSTER['sync'] = True


class UserAPITestCase(APITransactionTestCase):
    print(settings.Q_CLUSTER)

'print' 显示 'sync':True 已添加,但 async_task 仍以异步模式运行。

但是,如果我直接在设置文件中添加同步设置,一切都会正常运行,并且 async_task 会同步运行。

如果稍后更新,就好像 django-q 没有接受设置。我该如何解决?

【问题讨论】:

你如何解决这个问题。目前我有同样的问题。 【参考方案1】:

尝试做

from django.test import override_settings
from django.conf import settings


@override_settings(Q_CLUSTER=**settings.Q_CLUSTER, 'sync': True)
class UserAPITestCase(APITransactionTestCase):
    pass

【讨论】:

不幸的是,我得到了相同的结果。同步未更新为 True 似乎 override_settings 和 DRF 可能存在问题 如果此解决方案不起作用,我建议您遵循最佳实践来处理不同环境中的设置,例如登台、测试、开发和生产。它是创建一个基本设置文件并从中继承其他环境的文件。这是关于它的helpful article。 谢谢。我也有同样的想法。目前,我将其作为一种解决方法。

以上是关于Django-Q 设置 Q_CLUSTER 'sync': True 不适用于单元测试的主要内容,如果未能解决你的问题,请参考以下文章

Django-q如何从代码中删除计划任务

带有 Amazon SQS 配置的 Django-q

django-q如何删除定时任务

为啥django-q会用箭头时间抛出异常

django-Q对象的使用

django-q 单个作业的多个 cron 表达式