在我的角度4应用程序,我需要测试它在某些时候它调用具有相同服务的私有方法的服务的方法:
window.location.replace(url);
当测试到该行,业力亚军浏览器被重定向到url
,当然这不是我想要的。
如果我试图窥探它,我得到:
Error: <spyOn> : replace is not declared writable or has no setter
我怎样才能正确地检验我的方法?
在我的角度4应用程序,我需要测试它在某些时候它调用具有相同服务的私有方法的服务的方法:
window.location.replace(url);
当测试到该行,业力亚军浏览器被重定向到url
,当然这不是我想要的。
如果我试图窥探它,我得到:
Error: <spyOn> : replace is not declared writable or has no setter
我怎样才能正确地检验我的方法?
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
提供者可以在测试存根和全局可以彻底的测试。
另外,运营商可以在使用每个全局创建。