[PIX-13144] fix: устранить недетерминизм server-тестов (agent-live-run/instance-settings routes) #197
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "agent/fullstack/pix-13144"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что сделано
Устранена корневая причина рецидива недетерминизма после PIX-13019 (CI runs 17088/17095):
agent-live-run-routes.test.tsиinstance-settings-routes.test.ts: параллельныеvi.importActual()черезPromise.all()гонялись с резолвомvi.doMock()-графа модулей — транзитивные импорты роута (например../services/index.js) иногда резолвились в реальную немоканную реализацию вместо фикстуры изregisterModuleMocks(). Вызовы сделаны последовательными.agent-live-run-routes.test.ts:beforeEachпереведён сvi.clearAllMocks()наvi.resetAllMocks()—clearAllMocksне очищает once-очередьmockResolvedValueOnce/mockRejectedValueOnce, непотреблённое одним тестом значение просачивалось в следующий и производило межтестовые падения в зависимости от порядка.setup-supertest.ts: добавлено закрытие всех ephemeral HTTP-серверов (app.listen(0)), поднятых supertest, вafterEach— раньше они утекали на весь процесс vitest файла.Зачем
После закрытия PIX-13019 (done 2026-07-04) нестабильность вернулась на разных одиночных route-тестах при идентичном коде. Внешние коллизии (параллельные runs, workdir) исключены отдельным расследованием (PIX-13137) — причина была в самой тестовой сюите.
План тестирования
tsc --noEmit— чисто.instance-settings-routes.test.ts+agent-live-run-routes.test.tsсvitest --sequence.shuffle(разные seed каждый раз).*routes*.test.ts(69 файлов, 801 тест): 62 файла зелёные, 757 тестов проходят. Оставшиеся 7 файлов падают тем же образом и без этого изменения (на чистомmaster) — это отдельная pre-existing проблема сprojectId-валидацией, не связанная с PIX-13144.Где могу ошибаться
*routes*.test.ts, которая покрывает тот же паттернcreateApp()/vi.importActual(), что и оба упавших в CI теста.Корневая причина рецидива после PIX-13019: параллельные vi.importActual() вызовы через Promise.all() гонялись с vi.doMock()-резолвом графа модулей — транзитивные импорты роута (например ../services/index.js) иногда резолвились в реальную немоканную реализацию вместо фикстуры из registerModuleMocks(). В instance-settings это давало `db.select is not a function` на стаб {} db; в agent-live-run — падение assertion на другом route-тесте. Оба вызова сделаны последовательными. Дополнительно agent-live-run-routes.test.ts переведён с vi.clearAllMocks() на vi.resetAllMocks() в beforeEach: clearAllMocks не трогает once-очередь mockResolvedValueOnce/mockRejectedValueOnce, и непотреблённое одним тестом значение просачивалось в следующий, провоцируя межтестовые падения в зависимости от порядка выполнения. setup-supertest.ts теперь закрывает все ephemeral HTTP-серверы, поднятые через app.listen(0) в supertest, в afterEach — раньше они утекали на весь процесс vitest для файла. Проверено: 8 подряд зелёных прогонов обеих сюит с `vitest --sequence.shuffle` (разные seed) + широкий прогон всех *routes*.test.ts (69 файлов) — 62 файла зелёные, те же 7 файлов падают и без этого изменения (projectId-валидация, не связано с PIX-13144). tsc --noEmit чист.