Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js busboyConstructor上不存在Jest Mock实现_Node.js_Typescript_Jestjs_Busboy - Fatal编程技术网

Node.js busboyConstructor上不存在Jest Mock实现

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

经过所有的研究,我找不到问题的答案

当我试图在我的项目中使用jest模拟busboy时,它一直说
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')
  ...