Вы не можете использовать jest.mock()
внутри функциональной области теста. Вы должны использовать его в области действия модуля.
Например, my-module.ts
:
import minimatch from 'minimatch';
export function foo(pattern: string, str: string): boolean {
return minimatch(pattern, str);
}
my-module.test.ts
:
import { foo } from './my-module';
import minimatch from 'minimatch';
jest.mock('minimatch', () => jest.fn());
describe('minimatch', () => {
it('should call minimatch', () => {
foo('*', 'hello');
expect(minimatch).toHaveBeenCalled();
});
});
Результаты модульных испытаний со 100% покрытием:
PASS stackoverflow/60350522/my-module.test.ts
minimatch
✓ should call minimatch (6ms)
--------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
--------------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
my-module.ts | 100 | 100 | 100 | 100 |
--------------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 4.304s, estimated 6s
Если вы хотите смоделировать модуль внутри тестового примера, вы должны использовать jest.doMock (moduleName, factory, options) .
Например
my-module.test.ts
:
describe('minimatch', () => {
it('should call minimatch', () => {
jest.doMock('minimatch', () => jest.fn());
const { foo } = require('./my-module');
const minimatch = require('minimatch');
foo('*', 'hello');
expect(minimatch).toHaveBeenCalled();
});
});