những gì tôi đã làm cho trường hợp này là để phát hiện nếu tôi đang thử nghiệm và sử dụng fakeredis trong khi kiểm tra. Cuối cùng, trong các thử nghiệm bản thân, tôi enqueue nhiệm vụ lao động redis trong chế độ đồng bộ:
đầu tiên, xác định một chức năng phát hiện nếu bạn đang thử nghiệm:
TESTING = len(sys.argv) > 1 and sys.argv[1] == 'test'
def am_testing():
return TESTING
sau đó trong tập tin của bạn có sử dụng redis phải xếp hàng lập nhiệm vụ, quản lý hàng đợi theo cách này. bạn có thể mở rộng get_queue để chỉ định tên hàng đợi nếu cần thiết:
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()
sau đó, enqueue nhiệm vụ của bạn như sau:
queue = get_queue()
queue.enqueue(task_mytask, arg1, arg2)
cuối cùng, trong chương trình thử nghiệm của bạn, chạy về công việc bạn đang thử nghiệm đồng bộ chế độ, để nó chạy trong cùng một quá trình như thử nghiệm của bạn. Như một vấn đề của thực tế, đầu tiên tôi xóa hàng đợi fakeredis, nhưng tôi không nghĩ rằng cần thiết của nó vì không có người lao động:
from rq import Queue
from fakeredis import FakeStrictRedis
FakeStrictRedis().flushall()
queue = Queue(async=False, connection=FakeStrictRedis())
queue.enqueue(task_mytask, arg1, arg2)
settings.py của tôi có các thiết lập django_redis bình thường, vì vậy django_rq.getqueue() sử dụng chúng khi được triển khai:
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,
}
}
Bạn có một số câu trả lời hay dưới đây - tại sao không chấp nhận câu trả lời? Chúc may mắn! – Erik
Không có câu trả lời hiện tại nói làm thế nào để đảm bảo dụ Redis được chế giễu hoặc tách ra từ thực tế (cách Django cô lập cơ sở dữ liệu thử nghiệm). – Flimm