From 06c12d7d96b0ddd2aba82d3d1e8a8f2ecd2ad27d Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Fri, 24 Jul 2026 00:09:16 +0800 Subject: [PATCH] =?UTF-8?q?chore(ci):=20=E5=90=8C=E6=AD=A5main=E5=88=86?= =?UTF-8?q?=E6=94=AF=E6=B5=8B=E8=AF=95=E5=9F=BA=E7=A1=80=E8=AE=BE=E6=96=BD?= =?UTF-8?q?=E4=B8=8E=E5=B7=A5=E7=A8=8B=E5=8C=96=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 加prettier@^3.9.5 devDependency(main无此依赖导致Frontend Lint的npx交互失败) - 同步tests/conftest.py的Celery全局mock(main缺失导致Unit Tests连Redis失败) --- apps/web/package.json | 3 ++- tests/conftest.py | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/apps/web/package.json b/apps/web/package.json index 8fe1514e2..55c181ab9 100755 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -44,6 +44,7 @@ "jsdom": "^24.1.0", "typescript": "^5.5.3", "vite": "^5.3.1", - "vitest": "^1.6.0" + "vitest": "^1.6.0", + "prettier": "^3.9.5" } } diff --git a/tests/conftest.py b/tests/conftest.py index 1e9afca79..e2155d134 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -11,3 +11,42 @@ if str(ROOT) not in sys.path: # 必须在任何 app 模块导入之前设置,否则 pydantic Settings 验证失败 os.environ.setdefault("JWT_SECRET_KEY", "test-secret-key-for-all-tests") os.environ.setdefault("USE_IN_MEMORY_DB", "True") + + +# ── Celery 全局 mock ────────────────────────────────────────────────────── +# CI 环境没有 Redis,所有 Celery 异步任务都 mock 掉,避免连接超时报错 +# 集成测试只测 API 层逻辑(参数校验、权限、DB 操作),异步任务由 worker 单测覆盖 + +from unittest.mock import MagicMock + + +def _mock_celery_task(): + """全局 mock Celery 任务的 delay/apply_async/send_task 方法。""" + from celery import Celery, Task + + def _mock_delay(self, *args, **kwargs): + mock_result = MagicMock() + mock_result.id = "mock-task-id" + mock_result.state = "PENDING" + mock_result.ready.return_value = False + mock_result.get.return_value = None + return mock_result + + def _mock_apply_async(self, *args, **kwargs): + return _mock_delay(self, *args, **kwargs) + + def _mock_send_task(self, name, *args, **kwargs): + mock_result = MagicMock() + mock_result.id = f"mock-{name}" + mock_result.state = "PENDING" + mock_result.ready.return_value = False + mock_result.get.return_value = None + return mock_result + + Task.delay = _mock_delay + Task.apply_async = _mock_apply_async + Celery.send_task = _mock_send_task + + +# 在任何 app 模块导入之前就 patch 掉 +_mock_celery_task()