【发布时间】:2016-07-22 08:45:03
【问题描述】:
我有这个功能需要测试:
login(): void {
this.userService.setSessionAndDateOnlogin();
this.loginService.getLogin()
.subscribe(
octopusUrl => window.location.href = octopusUrl);
}
我使用 window.location.href 导航到外部 URL。
这是我的测试:
it('login function should call the setSessionAndDateOnLogin function from the userservice and\
subscribe to the getLogin function of the loginService.',
fakeAsync(
inject(
[LoginComponent, LoginService, UserService],
(loginComponent: LoginComponent, loginService: LoginService, userService: UserService) => {
spyOn(userService, 'setSessionAndDateOnlogin');
loginComponent.login();
expect(userService.setSessionAndDateOnlogin).toHaveBeenCalled();
})
)
);
当我运行此测试时,我收到以下错误:
您的一些测试重新加载了整个页面!
所以我尝试模拟窗口对象:
import { window } from '@angular/platform-browser/src/facade/browser';
...
class MockWindow {
location: {
href: ''
};
}
...
beforeEach(() => addProviders([
...
{ provide: window, useClass: MockWindow }
]));
这没有改变,错误仍然存在。
有人有解决这个问题的办法吗?
【问题讨论】:
标签: unit-testing angular jasmine window.location