如何在 angular 12 单元测试中对 window.location.reload 进行单元测试?

在我的 angular 项目中,我有一个函数

reloadPage(): void {
  window.location.reload();
}

所以每当我需要重新加载页面时,我都会调用这个函数。

现在我正在尝试为此功能添加单元测试,但它不起作用。

it("reloadPage: should be validated",() => {
    spyOn(window.location,'reload').and.callFake(() => {
      //test
    });
    component.reloadPage();
});

它仍然在单元测试中重新加载页面

如何实现此功能的单元测试?任何帮助将不胜感激。提前致谢

ubiqual 回答:如何在 angular 12 单元测试中对 window.location.reload 进行单元测试?

我发现以下解决方案有效。

在您的组件中,使用 InjectionToken 注入窗口。

const MY_WINDOW_TOKEN = new InjectionToken<Window>('Window');

然后你的组件的构造函数接受:

constructor(@Inject(MY_WINDOW_TOKEN) private window: Window) { ... }

在您的模块中提供:

{ provide: MY_WINDOW_TOKEN,useValue: window }

在您的测试(规范)中,通过在 TestBed 配置中提供模拟/间谍实现来注入另一个(模拟)窗口:

{ 
  provide: MY_WINDOW_TOKEN,useFactory: () => {
    return jasmine.createSpyObj('Window',[...]);
  }
}

基本上归结为将您的测试主题与其依赖项隔离开来。

注意:所有代码都是从内存中编写的,可能需要一些修改才能实际工作/编译)

,

您必须在您的 Window

中提供模拟 TestBed.configureTestingModule 对象
windowMock = {
location: {
reaload: jasmine.createSpy('reaload')
 }
}

然后在providers

{provide: WINDOW,useValue: windowMock}
本文链接:https://www.f2er.com/3127.html

大家都在问