Вот решение для модульного теста:
index.js
:
const fs = require('fs');
export function deleteFile(fileName) {
fs.unlink(fileName, (err) => {
if (err) throw err;
console.log('file was deleted.');
});
}
index.test.js
:
const { deleteFile } = require('./');
const fs = require('fs');
jest.mock('fs', () => {
const mFs = { unlink: jest.fn() };
return mFs;
});
describe('61082732', () => {
afterEach(() => {
jest.restoreAllMocks();
});
it('should unlink file', () => {
fs.unlink.mockImplementationOnce((filename, callback) => {
callback(null);
});
const logSpy = jest.spyOn(console, 'log');
const filename = 'avatar.jpg';
deleteFile(filename);
expect(fs.unlink).toBeCalledWith(filename, expect.any(Function));
expect(logSpy).toBeCalledWith('file was deleted.');
});
it('should throw an error', () => {
const mError = new Error('not found');
fs.unlink.mockImplementationOnce((filename, callback) => {
callback(mError);
});
const logSpy = jest.spyOn(console, 'log');
const filename = 'avatar.jpg';
expect(() => deleteFile(filename)).toThrowError(mError);
expect(fs.unlink).toBeCalledWith(filename, expect.any(Function));
expect(logSpy).not.toBeCalled();
});
});
Результаты модульного теста со 100% покрытием:
PASS stackoverflow/61082732/index.test.js (8.797s)
61082732
✓ should unlink file (14ms)
✓ should throw an error (1ms)
console.log node_modules/jest-environment-enzyme/node_modules/jest-mock/build/index.js:866
file was deleted.
----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
index.js | 100 | 100 | 100 | 100 |
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 10.169s
исходный код: https://github.com/mrdulin/react-apollo-graphql-starter-kit/tree/master/stackoverflow/61082732