Angular单元测试window.open找不到文档

Angular unit test window.open can not find document

在我的代码库中,我调用 window.open,然后在调用 document.write 函数后,如下所示。

 public launch() {
          const previewWindow = window.open('');
    
          previewWindow.document.write(
            `<iframe width="100%" height="100%" src="${this.src}"></iframe>`
          );
          previewWindow.document.body.setAttribute(
            'style',
            'padding: 0; margin: 0; overflow: hidden;'
          );
}

但是当我执行单元测试文档时出现以下错误

TypeError: Cannot read properties of undefined (reading 'document')

我的单元测试实现如下

it('should open url', () => {
    const windowSpy = spyOn(window, 'open');
    component.launch();
    expect(windowSpy).toHaveBeenCalled();
});

你的间谍没有return任何东西。当此代码运行时:

      const previewWindow = window.open(''); 
      previewWindow.document

previewWindow 仍将为空,这就是您收到错误的原因。

在测试中做这样的事情:

const previewWindowMock = {
  document: {
    write() { },
    body: {
      setAttribute() { }
    }
  }
} as unknown as Window;
const windowSpy = spyOn(window, 'open').and.returnValue(previewWindowMock);

这样,当方法运行时,您将不会有未定义的值。