Angular 带window.location.replace的角度测试服务方法
在Angular 4应用程序中,我需要测试一个服务的方法,该方法在某个点调用同一服务的私有方法,该方法具有:Angular 带window.location.replace的角度测试服务方法,angular,unit-testing,jasmine,karma-jasmine,window.location,Angular,Unit Testing,Jasmine,Karma Jasmine,Window.location,在Angular 4应用程序中,我需要测试一个服务的方法,该方法在某个点调用同一服务的私有方法,该方法具有: window.location.replace(url) 当测试到达该行时,karma runner浏览器将被重定向到url,这当然不是我想要的。 如果我试图刺探它,我会得到: 错误::replace未声明为可写或没有setter 如何正确测试我的方法?位置对象是,其属性也是只读的 最好的测试友好策略是不直接使用本机对象,而是通过DI,因为可测试性是DI的主要优点之一 文档已经有了文档,
window.location.replace(url)代码>
当测试到达该行时,karma runner浏览器将被重定向到url
,这当然不是我想要的。
如果我试图刺探它,我会得到:
错误::replace未声明为可写或没有setter
如何正确测试我的方法?位置
对象是,其属性也是只读的
最好的测试友好策略是不直接使用本机对象,而是通过DI,因为可测试性是DI的主要优点之一
文档
已经有了文档
,可以对窗口
进行完全相同的操作,类似于AngularJS$window
服务:
const WINDOW = new InjectionToken('window');
function getWindow() {
return window;
}
...
{ provide: WINDOW, useFactory: getWindow }
...
...
constructor(@Inject(WINDOW) public window) {
this.window.location.replace(...);
}
...
在此设置窗口中
可以在测试中对提供者进行存根,并且可以彻底测试全局
或者,可以为每个正在使用的全局服务创建提供程序。我会将对窗口的任何引用移动到单独的服务中,这应该是微不足道的,您可以在其他地方对其进行模拟