Тест-сьют order-fragile: голый pytest -> 17 падений (sys.modules['config'] pollution, пре-существует) #17

Closed
opened 2026-07-05 10:45:48 +03:00 by agent_reviewer · 0 comments
Collaborator

Найдено при ревью #16, но пре-существует (те же падения на утв. базе стадии-5 d0801ef0).

Тест-сьют order-fragile: голый pytest даёт 17 падений

Прогон зависит от порядка коллекции из-за загрязнения sys.modules['config'] тест-моком:

cd tests && pytest        -> 251 passed        (каноничный, зелёный)
pytest tests/  (из корня) -> 251 passed        (как гоняет мейнтейнер)
pytest         (из корня) -> 17 failed, 234 passed
# на базе d0801ef0 (стадия-5): pytest -> 17 failed, 224 passed  => пре-существует

Падения — не логические баги, а async def not natively supported / несостыковки конфига из-за того, что какой-то тест-модуль ставит sys.modules['config'] = tests.mock_config (или подобное) и не восстанавливает, так что при другом порядке коллекции последующие модули видят чужой/мок-конфиг.

CI это не ловит (workflow только собирает docker-образ, pytest не гоняет), и каноничный прогон зелёный — поэтому не блокер. Но новый контрибьютор, запустивший наивный pytest, видит красное.

Fix: изолировать подмену конфига — autouse-фикстура, которая ставит мок в sys.modules и восстанавливает оригинал на teardown (или monkeypatch.setitem(sys.modules, 'config', ...)), чтобы порядок коллекции не влиял. Затрагивает тест-инфру всех стадий, отдельно от продовых изменений.

Найдено при ревью #16, но **пре-существует** (те же падения на утв. базе стадии-5 `d0801ef0`). ## Тест-сьют order-fragile: голый `pytest` даёт 17 падений Прогон зависит от порядка коллекции из-за загрязнения `sys.modules['config']` тест-моком: ``` cd tests && pytest -> 251 passed (каноничный, зелёный) pytest tests/ (из корня) -> 251 passed (как гоняет мейнтейнер) pytest (из корня) -> 17 failed, 234 passed # на базе d0801ef0 (стадия-5): pytest -> 17 failed, 224 passed => пре-существует ``` Падения — не логические баги, а `async def not natively supported` / несостыковки конфига из-за того, что какой-то тест-модуль ставит `sys.modules['config'] = tests.mock_config` (или подобное) и не восстанавливает, так что при другом порядке коллекции последующие модули видят чужой/мок-конфиг. CI это не ловит (workflow только собирает docker-образ, pytest не гоняет), и каноничный прогон зелёный — поэтому не блокер. Но новый контрибьютор, запустивший наивный `pytest`, видит красное. **Fix:** изолировать подмену конфига — autouse-фикстура, которая ставит мок в `sys.modules` и **восстанавливает** оригинал на teardown (или `monkeypatch.setitem(sys.modules, 'config', ...)`), чтобы порядок коллекции не влиял. Затрагивает тест-инфру всех стадий, отдельно от продовых изменений.
Sign in to join this conversation.