设置:
为什么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
是否为“功能”来解决该问题,但是我对这种行为的原因很感兴趣。
非常感谢您提供的信息!
答案 0 :(得分:1)
Jest中有一个长期存在的错误,标题为"Jest globals differ from Node globals"。除非您要针对自己类之一的实例进行测试,否则这将严重限制toBeInstanceOf
方法的有效性。目前,最简单的解决方法是仅测试expect(fn().constructor.name).toBe('Promise')
,充分了解其用途远比instanceof
有限。总比没有好,因为它似乎不会在不久的将来修复Jest错误。
我也可能建议您不必进行示例测试,因为您正在测试util.promisify
的内部,但是我知道这可能只是更大问题的MVP。祝你好运!