Jest Mock FS File Stream



我对开玩笑和嘲笑很陌生,我有一个fs模块读取流,其中有2个事件和数据,我正在尝试嘲笑下面的代码

ReadFile.js

const csv = require('csv-parser');
let storeData=[];
csvFileReader() {
fs.createReadStream(path.resolve(__dirname, "./abc.csv"))
.pipe(csv())
.on('data',  async (row) => {

storeData[0] = row.postcode;
})
.on('end', () => {              
console.log('Done')
});
}

ReadFileTest.js

import ReadFile from './readFile.js';
const fs = require('fs');
jest.mock('fs');
describe('Load File', () => {
const readFile= new ReadFile();
test('Test data handler', async () => {

const mockPipeOn = { on: jest.fn().mockImplementation(function(this, event, handler) {
if (event === 'data') {
jest.fn.mockReturnValueOnce("Reading Data")
}
if (event === 'end') {
jest.fn.mockReturnValueOnce("Completed Reading Data")
}
return this;
}), };
const mockReadStream = { pipe: jest.fn().mockReturnValueOnce(mockPipeOn) };
const createReadStream = jest.fn().mockReturnValueOnce(mockReadStream);
await readFile.csvFileReader();

});
});

我在"这个"关键字上得到错误,它没有进入"数据"one_answers"结束"错误处理程序

您应该使用mockFn.mockReturnThis((来返回上下文。

例如

ReadFile.js:

import fs from 'fs';
import path from 'path';
import csv from 'csv-parser';
class ReadFile {
csvFileReader() {
fs.createReadStream(path.resolve(__dirname, './abc.csv'))
.pipe(csv())
.on('data', async (row) => {
console.log('Storing Data');
})
.on('end', () => {
console.log('Done');
});
}
}
export default ReadFile;

ReadFile.test.js

import ReadFile from './ReadFile';
import fs from 'fs';
jest.mock('fs');
describe('67216891', () => {
const readFile = new ReadFile();
it('should store', () => {
const mReadStream = {
pipe: jest.fn().mockReturnThis(),
on: jest.fn().mockImplementation(function (event, handler) {
handler();
return this;
}),
};
fs.createReadStream.mockReturnValueOnce(mReadStream);
readFile.csvFileReader();
expect(fs.createReadStream).toBeCalledTimes(1);
expect(mReadStream.pipe).toBeCalledTimes(1);
expect(mReadStream.on).toBeCalledWith('data', expect.any(Function));
expect(mReadStream.on).toBeCalledWith('end', expect.any(Function));
});
});

测试结果:

PASS  examples/67216891/ReadFile.test.js (8.891 s)
67216891
✓ should store (20 ms)
console.log
Storing Data
at ReadFile.<anonymous> (examples/67216891/ReadFile.js:10:17)
console.log
Done
at examples/67216891/ReadFile.js:13:17
-------------|---------|----------|---------|---------|-------------------
File         | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------|---------|----------|---------|---------|-------------------
All files    |     100 |      100 |     100 |     100 |                   
ReadFile.js |     100 |      100 |     100 |     100 |                   
-------------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        10.159 s

最新更新