diff --git a/api/tests/unit_tests/conftest.py b/api/tests/unit_tests/conftest.py index e09acc4c39..273fb7208a 100644 --- a/api/tests/unit_tests/conftest.py +++ b/api/tests/unit_tests/conftest.py @@ -2,6 +2,7 @@ import os import pytest from flask import Flask +from unittest.mock import MagicMock, patch # Getting the absolute path of the current file's directory ABS_PATH = os.path.dirname(os.path.abspath(__file__)) @@ -11,6 +12,24 @@ PROJECT_DIR = os.path.abspath(os.path.join(ABS_PATH, os.pardir, os.pardir)) CACHED_APP = Flask(__name__) +# set global mock for Redis client +redis_mock = MagicMock() +redis_mock.get = MagicMock(return_value=None) +redis_mock.setex = MagicMock() +redis_mock.setnx = MagicMock() +redis_mock.delete = MagicMock() +redis_mock.lock = MagicMock() +redis_mock.exists = MagicMock(return_value=False) +redis_mock.set = MagicMock() +redis_mock.expire = MagicMock() +redis_mock.hgetall = MagicMock(return_value={}) +redis_mock.hdel = MagicMock() +redis_mock.incr = MagicMock(return_value=1) + +# apply the mock to the Redis client in the Flask app +redis_patcher = patch("extensions.ext_redis.redis_client", redis_mock) +redis_patcher.start() + @pytest.fixture def app() -> Flask: @@ -21,3 +40,20 @@ def app() -> Flask: def _provide_app_context(app: Flask): with app.app_context(): yield + + +@pytest.fixture(autouse=True) +def reset_redis_mock(): + """在每个测试前重置 Redis mock""" + redis_mock.reset_mock() + redis_mock.get.return_value = None + redis_mock.setex.return_value = None + redis_mock.setnx.return_value = None + redis_mock.delete.return_value = None + redis_mock.exists.return_value = False + redis_mock.set.return_value = None + redis_mock.expire.return_value = None + redis_mock.hgetall.return_value = {} + redis_mock.hdel.return_value = None + redis_mock.incr.return_value = 1 + yield diff --git a/api/tests/unit_tests/services/test_dataset_service.py b/api/tests/unit_tests/services/test_dataset_service.py index 65bd616293..5c4a843b95 100644 --- a/api/tests/unit_tests/services/test_dataset_service.py +++ b/api/tests/unit_tests/services/test_dataset_service.py @@ -6,18 +6,12 @@ from unittest.mock import MagicMock, Mock, call, patch import pytest -redis_mock = MagicMock() -redis_mock.get = Mock(return_value=None) -redis_mock.setex = Mock() -redis_mock.setnx = Mock() -redis_mock.delete = Mock() -redis_mock.lock = Mock() - -# Mock Redis client to avoid initialization issues during import -with patch("extensions.ext_redis.redis_client", redis_mock): - from models.dataset import Dataset, Document - from services.dataset_service import DocumentService - from services.errors.document import DocumentIndexingError +# 从 conftest.py 导入全局的 redis_mock +from tests.unit_tests.conftest import redis_mock + +from models.dataset import Dataset, Document +from services.dataset_service import DocumentService +from services.errors.document import DocumentIndexingError class TestDatasetServiceBatchUpdateDocumentStatus(unittest.TestCase):