这是UT解决方案:
index.ts
:
import fs from 'fs';
export const viewText = () => {
fs.readFile('poem.txt','utf8',(err,data) => {
if (err) throw err;
console.log(data);
});
};
index.spec.ts
:
import { viewText } from './';
import fs from 'fs';
const mockPoem =
'Some say the world will end in fire,Some say in ice. From what I’ve tasted of desire I hold with those who favor fire ... And would suffice.';
describe('viewText',() => {
afterEach(() => {
jest.restoreAllMocks();
});
test('prints poem to console',done => {
const logSpy = jest.spyOn(console,'log');
let readFileCallback;
// @ts-ignore
jest.spyOn(fs,'readFile').mockImplementation((path,options,callback) => {
readFileCallback = callback;
});
viewText();
readFileCallback(null,mockPoem);
expect(logSpy).toBeCalledWith(mockPoem);
expect(fs.readFile).toBeCalledWith('poem.txt',readFileCallback);
done();
});
test('should throw error when read file failed',done => {
let readFileCallback;
// @ts-ignore
jest.spyOn(fs,callback) => {
readFileCallback = callback;
});
viewText();
const mError = new Error('read file failed');
expect(() => readFileCallback(mError,null)).toThrowError(mError);
expect(fs.readFile).toBeCalledWith('poem.txt',readFileCallback);
done();
});
});
覆盖率100%的单元测试结果:
PASS src/stackoverflow/58810079/index.spec.ts (11.118s)
viewText
✓ prints poem to console (23ms)
✓ should throw error when read file failed (3ms)
console.log node_modules/jest-mock/build/index.js:860
Some say the world will end in fire,Some say in ice. From what I’ve tasted of desire I hold with those who favor fire ... And would suffice.
----------|----------|----------|----------|----------|-------------------|
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: 13.129s
源代码:https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/58810079
本文链接:https://www.f2er.com/3120750.html