fix(test): test_ingest_hevc_transcode_task 模块级 mock 用后清理,修复跨文件 mock 污染
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3m5s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m35s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m45s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 4m9s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m6s
AI Code Review / AI Code Review (pull_request) Successful in 4m22s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m15s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 4m38s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m50s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3m5s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m35s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m45s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 4m9s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m6s
AI Code Review / AI Code Review (pull_request) Successful in 4m22s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m15s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 4m38s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m50s
该文件在模块导入时向 sys.modules 注入 worker_app.db/celery_app/core.config、 video_processing.oss_helpers/thumbnail_generator 的 MagicMock(用于让 ingest 任务模块可导入),但注入后从不清理。pytest-xdist 下同一 worker 进程后续执行的测试文件会直接拿到 MagicMock 版本的模块——表现为 test_thumbnail_generator 的 50 个纯逻辑用例断言到 <MagicMock> 而失败 (执行顺序相关,故为非确定性失败)。 添加 module 作用域 autouse fixture,在本文件测试跑完后移除 mock 并 重新导入真实模块,与 test_dedup_pure/test_generated_video_creation_logic 的清理模式一致。 配套 #1563(test_dedup_engine 父包 mock 污染)。
This commit is contained in:
@@ -45,6 +45,38 @@ import pytest # noqa: E402
|
||||
from worker_app.tasks import ingest as ingest_mod # noqa: E402
|
||||
|
||||
|
||||
# ── 模块级 mock 的清理 ─────────────────────────────────────────────────────
|
||||
# 上方在模块导入时往 sys.modules 注入了 worker_app.* / video_processing.*
|
||||
# 的 MagicMock(为了让 ingest_mod 可导入)。模块级注入不会随测试结束自动
|
||||
# 撤销,会污染同一 pytest 进程(含 xdist worker)后续执行的其他测试文件:
|
||||
# 例如 test_thumbnail_generator.py 的纯逻辑用例会从 sys.modules 拿到
|
||||
# MagicMock 版本的 video_processing.thumbnail_generator,全部断言失败。
|
||||
# 用 module 作用域 autouse fixture 在本文件测试跑完后恢复真实模块。
|
||||
_MOCKED_MODULE_NAMES = (
|
||||
"worker_app.db",
|
||||
"worker_app.core.config",
|
||||
"worker_app.celery_app",
|
||||
"video_processing.oss_helpers",
|
||||
"video_processing.thumbnail_generator",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture(scope="module", autouse=True)
|
||||
def _restore_sys_modules_after_module_tests():
|
||||
yield
|
||||
for _name in _MOCKED_MODULE_NAMES:
|
||||
sys.modules.pop(_name, None)
|
||||
# 重新导入真实模块,让后续测试文件拿到真实实现
|
||||
import importlib
|
||||
|
||||
importlib.invalidate_caches()
|
||||
for _name in ("video_processing.oss_helpers", "video_processing.thumbnail_generator"):
|
||||
try:
|
||||
importlib.import_module(_name)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
class _FakeJobRepo:
|
||||
def __init__(self, db):
|
||||
self.initial_job = SimpleNamespace(
|
||||
|
||||
Reference in New Issue
Block a user