Jest的Expect(value).toBeInstanceOf(Class)失败,原因是Expect(util.promisify(...)())。toBeInstanceOf(Promise)和其他

时间:2019-09-20 13:50:51

标签: node.js jestjs

设置:

  • 笑话: 21.2.1
  • 节点: 10.16.3
  • npm: 6.9.0

为什么Jest的期望不能将node.js的util.promisify返回的承诺识别为Promise的实例?

以下失败:

const util = require('util');

const fn = util.promisify((opts, cb) => cb(null, {})); 
const promise = fn();
expect(promise).toBeInstanceOf(Promise)

同样,以下操作失败:

const util = require('util');

const fn = util.promisify((opts, cb) => cb(null, {}));
const promise = fn();
expect(promise.then).toBeInstanceOf(Function);

可以通过检查typeof promise.then是否为“功能”来解决该问题,但是我对这种行为的原因很感兴趣。

非常感谢您提供的信息!

1 个答案:

答案 0 :(得分:1)

Jest中有一个长期存在的错误,标题为"Jest globals differ from Node globals"。除非您要针对自己类之一的实例进行测试,否则这将严重限制toBeInstanceOf方法的有效性。目前,最简单的解决方法是仅测试expect(fn().constructor.name).toBe('Promise'),充分了解其用途远比instanceof有限。总比没有好,因为它似乎不会在不久的将来修复Jest错误。

我也可能建议您不必进行示例测试,因为您正在测试util.promisify的内部,但是我知道这可能只是更大问题的MVP。祝你好运!