我有一个typeguard,它检查依赖项的示例。
private isObjectOfA(obj: A | B ): obj is A {
return obj instanceof A;
}
字符串
在spec文件中,我已经模拟了A类。
jest.mock('./my-package/a', () => {
return {
A: jest.fn().mockImplementation(() => {
return {
someMethod: jest.fn()
};
})
};
});
import { A } from './my-package/a';
型
现在在测试过程中,isObjectOfA
总是返回false(因为在测试中,obj
的示例返回为“Object”而不是“A”。可能是由于模拟??)。有什么方法可以克服这个问题吗?创建对象的代码如下所示:
this.myObj = someCondition ? new A() : new B();
型
4条答案
按热度按时间a7qyws3x1#
为了通过
instanceof
检查,需要建立原型链,例如使用Object.create
:字符串
类自动模拟也将为模拟提供正确的原型链。
gupuwyp22#
由于我不想依赖于mock之外的任何东西,所以我基于@estus-flask的解决方案如下:
字符串
yvt65v4c3#
instanceof操作符测试构造函数的prototype属性是否出现在对象的prototype链中的任何位置。
这意味着您可以将mock的原型更改为
A
。yh2wf1be4#
如果mocked类的复杂实现无关紧要(在单元测试阶段不应该这样),那么你可以使用ts-ignore。这将允许TypeScript编译器重写实现,而不必担心mocking复杂依赖。
这就是我如何做到这一点,它为我的aws-cdk应用程序之一的目的。
主代码
字符串
嘲笑
型
测试
型