Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.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
Javascript 在Jest中测试包含Promise和FileReader()的函数_Javascript_Reactjs_Testing_Mocking_Jestjs - Fatal编程技术网

Javascript 在Jest中测试包含Promise和FileReader()的函数

Javascript 在Jest中测试包含Promise和FileReader()的函数,javascript,reactjs,testing,mocking,jestjs,Javascript,Reactjs,Testing,Mocking,Jestjs,当前正在尝试测试以下功能: const readFileAsync = (file, use = false) => new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => { resolve(reader.result); }; reader.onerror = reject; if (use) r

当前正在尝试测试以下功能:

const readFileAsync = (file, use = false) =>
  new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = () => {
      resolve(reader.result);
    };
    reader.onerror = reject;
    if (use) reader.readAsDataURL(file);
    else reader.readAsArrayBuffer(file);
  });

export default readFileAsync;

但是在文件阅读器方面存在大量的问题。有什么建议吗?

尽管我们模拟FileReader onload方法,但在执行readFileAsync方法后,reader.onload将分配给未模拟的匿名函数。因此,我们需要公开reader实例,在测试用例中获取reader实例,并手动执行reader.onload方法。然后,承诺将通过reader.result的模拟值来解决

例如。 index.ts:

const readFileAsync=file,use=false=> 新承诺人解决方案,拒绝=>{ const reader=新文件读取器; reader.onload==>{ 结果; }; reader.onerror=拒绝; 如果使用reader.readAsDataURLfile; else reader.readasarraybuffer文件; readFileAsync,如有。_reader=reader; }; 导出默认readFileAsync; 根据readFileAsync作为任何读取器公开读取器实例

index.test.ts:

从“/”导入readFileAsync; const mFileReader=jest.fn=>{ 返回{ readAsDataURL:jest.fn, readAsArrayBuffer:jest.fn, }; }; 全局为any.FileReader=mFileReader; 描述'59581721',=>{ 之后=>{ 开玩笑; }; 毕竟=>{ 开玩笑,恢复活力; }; 它“应正确读取为数据url”,异步=>{ const blob=新blob['a']; const pending=readfileasynchblob,true; const mReader=readFileAsync,与任何阅读器一样; mReader.result='模拟结果'; mReader.onload; const actual=等待挂起; 预期的实际结果是“模拟结果”; expectmReader.readAsDataURL.toBeCalledWithblob; }; 它“应正确读取为数组缓冲区”,异步=>{ const blob=新blob['a']; const pending=readFileAsyncblob; const mReader=readFileAsync,与任何阅读器一样; mReader.result='模拟结果'; mReader.onload; const actual=等待挂起; 预期的实际结果是“模拟结果”; expectmReader.readAsArrayBuffer.toBeCalledWithblob; }; }; 单元测试结果和覆盖率报告:

通过src/stackoverflow/59581721/index.test.ts 13.673s 59581721 ✓ 应在21毫秒内正确读取为数据url ✓ 应正确读取为数组缓冲区2ms -----|-----|-----|-----|-----|----------| 文件|%Stmts |%Branch |%Funcs |%Lines |未覆盖的行| -----|-----|-----|-----|-----|----------| 所有文件| 100 | 100 | 100 | 100 || index.ts | 100 | 100 | 100 | 100 || -----|-----|-----|-----|-----|----------| 测试套件:1个通过,共1个 测试:2次通过,共2次 快照:共0个 时间:15.648秒 我的测试环境是node


源代码:

您到底遇到了什么问题?什么类型的文件正在被传递到FileReader中,并且您正在测试套件中以dataURL或ArrayBuffer的形式读取?谢谢您的帮助,我非常感谢您的努力,但是我很难理解这里的TypeScript元素。readFileAsync的用途是什么;它做了什么在普通JS中做不到的事情?与any.FileReader=mFileReader相同,适用于全局文件;在测试文件中。@DanielCross我使用TypeScript,当然,它们可以使用普通JS来完成。xx作为任何一种表示它的类型断言。请参见readFileAsync的用途;正在公开读卡器实例,以便在执行readFileAsync方法并手动触发onload后获得读卡器实例。