首页 > 解决方案 > 开玩笑的方法 done() 没有定义

问题描述

我开始使用 jest,现在我需要测试回调。要知道何时调用回调,应该根据文档使用 done():https ://jestjs.io/docs/en/asynchronous.html

但是 done() 未被识别为未定义,因此引发此错误:

Test suite failed to run

    TypeScript diagnostics (customize using `[jest-config].globals.ts-jest.diagnostics` option):
   pathToErrorFile:line - error TS2304: Cannot find name 'done'.

    63       done();
             ~~~~

//code to reproduce:
test('test', ()=>{
   fkt(param, ()=>{
      done();   
   }); 
}); 

我已经用节点和角度设置了玩笑,在这两个项目中这个功能都不存在。所以我想知道的是,这个函数是从哪里来的,我该如何解决它。请注意,其他所有内容(测试、描述等)都可以正常工作 done() 作为其例外。

标签: jestjs

解决方案


done未定义为全局变量。你把它传递给测试函数。

test('test', done => {
   fkt(param, () => {
      done();   
   }); 
});

请注意,如果您指定参数,如果在测试完成后未调用done该函数,jest 将检测到它并在超时时使测试失败。done

如果done()从不调用,则测试将失败(出现超时错误),这是您想要发生的。

done然后,即使测试失败,您也必须调用- 否则您将看不到错误。

如果我们想在测试日志中查看失败的原因,我们必须将 expect 包装在 try 块中,并将 catch 块中的错误传递给 done。否则,我们最终会出现一个不透明的超时错误,该错误不会显示 expect(data) 接收到的值。

请参阅Jest - 测试异步代码


推荐阅读