【问题标题】:How can I emit error event in jest and typescript如何在 jest 和 typescript 中发出错误事件
【发布时间】:2019-05-20 02:45:03
【问题描述】:

例如,我使用的是Archiver

archive.on('error', err => {
  if (typeof callback === 'function') {
    callback.call(this, err);
  } else {
    throw err;
  }
});

这些线是根据玩笑揭开的。你怎么能发出这个错误?模拟?

【问题讨论】:

  • 您使用的是es6 导入还是require
  • 我正在使用 es6:import archiver from 'archiver';

标签: node.js typescript unit-testing jestjs


【解决方案1】:

您可以将回调移动到其他模块,然后将其导出,例如:

//calbacks.js

const errorCallback = callback => err => {
  if (typeof callback === 'function') {
    callback.call(this, err);
  } else {
    throw err;
  }
}

export {errorCallback} // es6 named export

然后你可以在你的主文件中导入它:

import { errorCallback } from "./callbacks.js" //path should be correct, this would work if you have both files in same directory

...

archive.on('error', errorCallback(callback)) //pass callback to curried function

你也可以直接在spec中导入并测试:

const spy = jest.fn()

errorCallback(fn)("error")    
expect(spy).toBeCalledWith("error");

还有当回调函数不起作用时的测试用例:

expect(() => {
    errorCallback("notFunction")("error")
}).toThrow()

【讨论】:

  • 太棒了,谢谢!我现在正在尝试这个,但我对 callback.js 在打字稿中的外观有点模糊 - 不再推断 callbackerrthis
  • 回调改为:const errorCallback = (callback: any) => (err: any) => { if (typeof callback === 'function') { callback(err); } ...
  • 抱歉,回复晚了。你的错误只是javascript错误?也许Error => void 适用于callbackError 适用于err
猜你喜欢
  • 2020-08-28
  • 2018-09-10
  • 1970-01-01
  • 2021-08-31
  • 2021-04-29
  • 2021-12-04
  • 1970-01-01
  • 2022-11-11
  • 2021-05-26
相关资源
最近更新 更多