设置:
为什么 Jest 的 expect 不能将 node.js 的 util.promisify 返回的承诺识别为 Promise 的实例?
以下失败:
const util = require('util');
const fn = util.promisify((opts, cb) => cb(null, {})); 
const promise = fn();
expect(promise).toBeInstanceOf(Promise)
Run Code Online (Sandbox Code Playgroud)
同样,以下失败:
const util = require('util');
const fn = util.promisify((opts, cb) => cb(null, {}));
const promise = fn();
expect(promise.then).toBeInstanceOf(Function);
Run Code Online (Sandbox Code Playgroud)
可以通过检查typeof promise.then“功能”来规避这个问题,但我对这种行为的原因很感兴趣。
非常感谢您提供的信息!
Jest 中有一个长期存在的错误,名为“Jest 全局变量与节点全局变量不同”。这严重限制了该toBeInstanceOf方法的有效性,除非您针对您自己的一个类的实例进行测试。目前,最简单的解决方法是简单地测试expect(fn().constructor.name).toBe('Promise'),充分理解它的实用性比instanceof. 总比没有好,因为看起来 Jest 错误不会在不久的将来得到修复。
我也可能建议您的示例测试是不必要的,因为您正在测试 的内部结构util.promisify,但我理解这可能只是一个更大问题的 MVP。祝你好运!
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           998 次  |  
        
|   最近记录:  |