Как сказал @ jfriend00,
переменная check
не является глобальной переменной в node.js. Эта переменная имеет область видимости модуля, а не глобальную область видимости.
Если вы хотите сделать check
глобальной переменной, вам нужно использовать global объект пространства имен.
Вот одно решение для вашего примера:
index.ts
:
(global as any).check = false;
export const doStuff = () => 'doStuff';
export const doOtherStuff = () => 'doOtherStuff';
export function myFunction() {
if ((global as any).check) {
doStuff();
} else {
doOtherStuff();
}
}
index.spec.ts
:
import * as funcs from './';
describe('myFunction', () => {
afterEach(() => {
// restore to original value if needed
(global as any).check = false;
});
it('should call doOtherStuff', () => {
const doOtherStuffSpy = jest.spyOn(funcs, 'doOtherStuff');
funcs.myFunction();
expect(doOtherStuffSpy).toBeCalled();
});
it('should call doStuff', () => {
(global as any).check = true;
const doStuffSpy = jest.spyOn(funcs, 'doStuff');
funcs.myFunction();
expect(doStuffSpy).toBeCalled();
});
});
результат модульного теста со 100% покрытием:
PASS src/stackoverflow/58454044/index.spec.ts (8.829s)
myFunction
✓ should call doOtherStuff (5ms)
✓ should call doStuff (1ms)
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
index.ts | 100 | 100 | 100 | 100 | |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 10.433s
Исходный код: https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/58454044