mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-08 17:08:35 +08:00
fix(test): stub app.infrastructure.sites in subprocess tests for CI
CI 无站点二进制模块,子进程测试绕过 conftest 垫片导致 test_manifest_aliases_reuse_real_canonical_modules 与 test_main_script_does_not_shadow_stdlib_platform 失败。 在子进程中复用 ensure_sites_stub,并给垫片补 __spec__。
This commit is contained in:
@@ -124,9 +124,11 @@ def ensure_sites_stub() -> None:
|
|||||||
try:
|
try:
|
||||||
import app.infrastructure.sites # noqa: F401 本地已拉取时用真实模块
|
import app.infrastructure.sites # noqa: F401 本地已拉取时用真实模块
|
||||||
except (ModuleNotFoundError, ImportError):
|
except (ModuleNotFoundError, ImportError):
|
||||||
|
from importlib.util import spec_from_loader
|
||||||
from types import ModuleType
|
from types import ModuleType
|
||||||
stub = ModuleType("app.infrastructure.sites")
|
stub = ModuleType("app.infrastructure.sites")
|
||||||
stub.SitesHelper = _SitesHelperStub
|
stub.SitesHelper = _SitesHelperStub
|
||||||
|
stub.__spec__ = spec_from_loader("app.infrastructure.sites", None)
|
||||||
sys.modules["app.infrastructure.sites"] = stub
|
sys.modules["app.infrastructure.sites"] = stub
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -165,6 +165,9 @@ def test_manifest_aliases_reuse_real_canonical_modules():
|
|||||||
code = """
|
code = """
|
||||||
import importlib
|
import importlib
|
||||||
from app.compat.manifest import MODULE_ALIASES
|
from app.compat.manifest import MODULE_ALIASES
|
||||||
|
# CI 无 app.infrastructure.sites 二进制模块,先补垫片再校验全部映射(与 conftest 同源)。
|
||||||
|
from app.testing.bootstrap import ensure_sites_stub
|
||||||
|
ensure_sites_stub()
|
||||||
|
|
||||||
for legacy_name, alias in MODULE_ALIASES.items():
|
for legacy_name, alias in MODULE_ALIASES.items():
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -14,6 +14,10 @@ def test_main_script_does_not_shadow_stdlib_platform(tmp_path):
|
|||||||
(
|
(
|
||||||
"import runpy",
|
"import runpy",
|
||||||
"import sys",
|
"import sys",
|
||||||
|
# CI 无 app.infrastructure.sites 二进制模块,先补垫片再执行 main.py(与 conftest 同源);
|
||||||
|
# 必须在篡改 sys.path / 摘除 platform 之前调用,避免真实模块依赖链误引被遮蔽的 app/platform。
|
||||||
|
"from app.testing.bootstrap import ensure_sites_stub",
|
||||||
|
"ensure_sites_stub()",
|
||||||
f"sys.path.insert(0, {str(MAIN_PATH.parent)!r})",
|
f"sys.path.insert(0, {str(MAIN_PATH.parent)!r})",
|
||||||
"sys.modules.pop('platform', None)",
|
"sys.modules.pop('platform', None)",
|
||||||
f"runpy.run_path({str(MAIN_PATH)!r}, run_name='pycharm_main_probe')",
|
f"runpy.run_path({str(MAIN_PATH)!r}, run_name='pycharm_main_probe')",
|
||||||
|
|||||||
Reference in New Issue
Block a user