如何模拟其父对象为可空类型的函数?



这是我的方法。

redirect(){
const url = 'localhost:4100';
this.document.defaultView?.open(url, '_blank'); 
}

显然open()存在于defaultView中。然而,当我试图模拟它时,我得到一个错误open不是这个对象的一部分。

const spyOpen = spyOn(document.defaultView, 'open').and.callFake(
(url: string, target: string = '_blank'): void => {
url;
target;
}
);

在Jest中,它可以是:

jest.spyOn(document.defaultView as Required<typeof document.defaultView>, 'open')

问题是,如果document.defaultView.open在运行时真的不是一个函数,Jest将无法监视它,在这种情况下,它不能使用Jest维护的监视,需要手动清理:

originalOpen = document.defaultView.open;
document.defaultView.open = jest.fn();
// in afterEach
document.defaultView.open = originalOpen;

同样可以应用于Jasmine,根据API的不同进行调整。

相关内容

  • 没有找到相关文章

最新更新