这是我的方法。
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的不同进行调整。