Node.js busboyConstructor上不存在Jest Mock实现
经过所有的研究,我找不到问题的答案 当我试图在我的项目中使用jest模拟busboy时,它一直说Node.js busboyConstructor上不存在Jest Mock实现,node.js,typescript,jestjs,busboy,Node.js,Typescript,Jestjs,Busboy,经过所有的研究,我找不到问题的答案 当我试图在我的项目中使用jest模拟busboy时,它一直说mockImplementation(和mockRestore)不是一个函数 import * as Busboy from 'busboy'; jest.mock('busboy'); describe('Sample test', () => { const mockedEvenMap = {}; beforeAll(() => { Busboy.mockImple
mockImplementation
(和mockRestore
)不是一个函数
import * as Busboy from 'busboy';
jest.mock('busboy');
describe('Sample test', () => {
const mockedEvenMap = {};
beforeAll(() => {
Busboy.mockImplementation(() => {
return { // mock `on` event of Busby instance
on: (event, callback) => {
mockedEvenMap[event] = callback;
},
};
});
});
afterAll(() => {
Busboy.mockRestore();
});
}
Busboy将其构造函数导出为模块的默认值,但似乎没有应用mock
巴士司机索引
Jest版本24.9
巴士男孩版本0.3.1
有什么想法吗?您应该使用method的第二个参数来模拟
Busboy
的构造函数
例如
main.ts
:
从“营业员”导入营业员;
导出函数main(){
const-busboy=新的busboy({});
on('file',(字段名、文件、文件名、编码、mimetype)=>{
console.log(
'文件['+fieldname+']:文件名:'+filename+',编码:'+encoding+',mimetype:'+mimetype,
);
});
}
main.test.ts
:
从“/main”导入{main};
从“营业员”中导入营业员;
开玩笑。模仿(‘勤杂工’,()=>{
常数mBusboy={
on:jest.fn(),
};
返回笑话fn(()=>mBusboy);
});
描述('59731700',()=>{
让勤杂工来;
在每个之前(()=>{
营业员=新营业员({});
});
之后(()=>{
开玩笑。clearAllMocks();
开玩笑。恢复记忆();
});
它('应该通过',()=>{
常量mockedEvenMap={};
busboy.on.mockImplementation((事件,回调)=>{
MockedEventMap[事件]=回调;
});
constlogspy=jest.spyOn(控制台,'log');
main();
mockedEvenMap['file']('a','b','c','d','e');
expect(logSpy).toBeCalledTimes(1);
});
});
单元测试结果和覆盖率报告:
通过src/stackoverflow/59731700/main.test.ts(16.143s)
59731700
✓ 应通过(22毫秒)
console.log node_modules/jest mock/build/index.js:860
文件[a]:文件名:c,编码:d,mimetype:e
----------|----------|----------|----------|----------|-------------------|
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s|
----------|----------|----------|----------|----------|-------------------|
所有文件| 100 | 100 | 100 | 100 ||
main.ts | 100 | 100 | 100 | 100 ||
----------|----------|----------|----------|----------|-------------------|
测试套件:1个通过,共1个
测试:1项通过,共1项
快照:共0个
时间:18.09秒
源代码:我将从另一个角度来看。您可能正在构建一个应用程序,而不是Busboy库,您的需求可能是确保应用程序正常工作 您是否考虑过在测试中通过Express.js堆栈?因为编写发送多部分/表单数据请求的测试非常简单。例如,使用supertest,您可以执行以下操作:
request(app)
.post('/')
.field('name', 'my awesome avatar')
.attach('avatar', 'test/fixtures/avatar.jpg')
...
那样的话,你就不必试着去模拟一个合适的组合
request(app)
.post('/')
.field('name', 'my awesome avatar')
.attach('avatar', 'test/fixtures/avatar.jpg')
...