【发布时间】:2021-04-07 10:25:54
【问题描述】:
我正在尝试模拟文件阅读器,并且我有一个接受回调的函数,但是在测试期间,调用回调的行没有被覆盖。怎么解决?
功能:
const testFunction = (uint8arr, callback) => {
const bb = new Blob([uint8arr]);
const f = new FileReader();
f.onload = function (e) {
callback(e.target.result);
};
f.readAsText(bb);
};
module.exports = { testFunction };
测试:
const { testFunction } = require("./index");
class FileReaderMock {
DONE = FileReader.DONE;
EMPTY = FileReader.EMPTY;
LOADING = FileReader.LOADING;
readyState = 0;
error = null;
result = null;
abort = jest.fn();
addEventListener = jest.fn();
dispatchEvent = jest.fn();
onabort = jest.fn();
onerror = jest.fn();
onload = jest.fn();
onloadend = jest.fn();
onloadprogress = jest.fn();
onloadstart = jest.fn();
onprogress = jest.fn();
readAsArrayBuffer = jest.fn();
readAsBinaryString = jest.fn();
readAsDataURL = jest.fn();
readAsText = jest.fn();
removeEventListener = jest.fn();
}
const mockCallback = jest.fn();
describe("testFunction", () => {
const fileReader = new FileReaderMock();
jest.spyOn(window, "FileReader").mockImplementation(() => fileReader);
it("should be called mockCallback and readAsText with the blob value", () => {
const uintArray = new Uint8Array();
testFunction(uintArray, mockCallback);
// expect(mockCallback).toHaveBeenCalled();
// expect(fileReader.readAsText).toHaveBeenCalledWith(new Blob([uintArray]));
});
});
代码沙盒:https://codesandbox.io/s/jest-test-forked-ecejb?file=/index.test.js
【问题讨论】:
标签: javascript node.js unit-testing jestjs mocking