角测试服务方法与[removed].replace(Angular testing Service

2019-10-29 21:56发布

在我的角度4应用程序,我需要测试它在某些时候它调用具有相同服务的私有方法的服务的方法:

window.location.replace(url);

当测试到该行,业力亚军浏览器被重定向到url ,当然这不是我想要的。

如果我试图窥探它,我得到:

Error: <spyOn> : replace is not declared writable or has no setter

我怎样才能正确地检验我的方法?

Answer 1:

location对象只读属性 ,其属性是只读的,以及。

最好的测试友好的战略是不直接,而是通过DI使用原生对象,因为testabiliry是DI的主要优点之一。

document已经DOCUMENT 提供商抽象 ,同样可以做到window完全类似,AngularJS $window服务:

const WINDOW = new InjectionToken('window');
function getWindow() {
  return window;
}

...
{ provide: WINDOW, useFactory: getWindow }
...

...
constructor(@Inject(WINDOW) public window) {
  this.window.location.replace(...);
}
...

在此设置WINDOW提供者可以在测试存根和全局可以彻底的测试。

另外,运营商可以在使用每个全局创建。



文章来源: Angular testing Service method with window.location.replace