, что я сделал для этого случая определить, тестирую ли я, и использовать fakeredis во время тестов. наконец, в самом тесте, я епдиеие в Redis уборщица задачу в режиме синхронизирующего:
первый, определить функцию, которая определяет, если вы тестируете:
TESTING = len(sys.argv) > 1 and sys.argv[1] == 'test'
def am_testing():
return TESTING
затем в файле, который использует Redis в очередь таким образом, управлять очередью. вы можете расширить get_queue указать имя очереди, если это необходимо:
if am_testing():
from fakeredis import FakeStrictRedis
from rq import Queue
def get_queue():
return Queue(connection=FakeStrictRedis())
else:
import django_rq
def get_queue():
return django_rq.get_queue()
тогда, епдиеие свою задачу следующим образом:
queue = get_queue()
queue.enqueue(task_mytask, arg1, arg2)
наконец, в тестовой программе, выполнить задание выполняется тестирование в синхронизации так что он работает в том же процессе, что и ваш тест. Как показывает практика, я первый очистить очередь fakeredis, но я не думаю, что его необходимо, так как нет рабочих:
from rq import Queue
from fakeredis import FakeStrictRedis
FakeStrictRedis().flushall()
queue = Queue(async=False, connection=FakeStrictRedis())
queue.enqueue(task_mytask, arg1, arg2)
мой settings.py имеет нормальные параметры django_redis, так django_rq.getqueue() использует их при развертывании:
RQ_QUEUES = {
'default': {
'HOST': env_var('REDIS_HOST'),
'PORT': 6379,
'DB': 0,
# 'PASSWORD': 'some-password',
'DEFAULT_TIMEOUT': 360,
},
'high': {
'HOST': env_var('REDIS_HOST'),
'PORT': 6379,
'DB': 0,
'DEFAULT_TIMEOUT': 500,
},
'low': {
'HOST': env_var('REDIS_HOST'),
'PORT': 6379,
'DB': 0,
}
}
У вас есть несколько хороших ответов ниже - почему бы не принять их? Удачи! – Erik
Ни один из текущих ответов не говорит о том, как убедиться, что экземпляр Redis издевается или отделен от реального (способ Django изолирует тестовую базу данных). – Flimm