Pattern fallibile (mock silenziosamente ignorato): ```js vi.mock('node:child_process', async (importOriginal) => ({ ...await importOriginal(), execFile: vi.fn(), })); ``` Pattern corretto (factory esplicita): ```js vi.mock('node:child_process', () => ({ execFile: vi.fn(), exec: vi.fn(), spawn: vi.fn(), // ...elenca esplicitamente solo i symbol che ti servono })); ``` Il getter-based descriptor pattern è specifico ai built-in (verificato su `node:child_process`, `node:fs`, `node:os`). Sui moduli npm normali lo spread funziona come ci si aspetta perché le property sono data descriptor, non getter.
Test unitari Vitest contro codice che chiama built-in Node tipo child_process — il mock sembra applicato (`vi.mock` ritorna l'oggetto) ma il SUT continua a invocare l'implementazione reale, causando test che passano localmente ma falliscono in CI con side effect reali.