0

这是我的方法。

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;
  }
);
4

1 回答 1

0

在 Jest 中,它可以是:

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

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

originalOpen = document.defaultView.open;
document.defaultView.open = jest.fn();

// in afterEach
document.defaultView.open = originalOpen;

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

于 2021-08-04T08:09:07.927 回答