我有一个文件celery_test.py它应该加载 Django 中 testing(config.test( 的配置设置,但它加载了 Development(config.development( 的配置
from __future__ import absolute_import
import os
from django.conf import settings
from celery import Celery
os.environ.setdefault(
"DJANGO_SETTINGS_MODULE", "config.testing"
)
test_app = Celery('test')
test_app.config_from_object('django.conf:settings')
test_app.autodiscover_tasks()
print("Testing celery")
print(settings)
@test_app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
当我打印设置时,它会打印config.development
而不是config.testing
。谁能在这里帮我如何加载config.testing
?
看到你使用 django,我建议不要像这样实际覆盖设置文件。而是使用django.test.override_settings
修饰器来覆盖要更改的特定设置。这样,您始终可以测试最新的设置文件,因此您不必同时保持两个文件都是最新的。
更多信息也在文档中:https://docs.djangoproject.com/en/3.0/topics/testing/tools/#django.test.override_settings。
我真的无法提供示例,因为您没有提供任何单元测试示例。但我希望链接的文档足够清晰。
假设你正在使用pytest
,你可以把它放在你的pytest.ini
文件中:
[pytest]
DJANGO_SETTINGS_MODULE = celery_test.py
或使用:
DJANGO_SETTINGS_MODULE=celery_test.py pytest
对于单行。