角度单元测试 window.location.href

Nik*_*chi 5 unit-testing jasmine karma-jasmine angular

login() {
  const endPoint = environment.myEndPoint;
  window.location.href = endPoint + '/myPath/login';
}
Run Code Online (Sandbox Code Playgroud)

我有角度服务文件,其中写入了上述代码以重定向到登录 URL。现在,我已在规范文件中编写了以下代码来对其进行单元测试。

it('should call login method',() => {
  service.digitalssologin();
});
Run Code Online (Sandbox Code Playgroud)

该测试用例有时覆盖登录方法并成功执行,但有时失败并且karma工具断开连接,因此其他测试用例也停止执行。还有其他方法可以为此方法编写测试用例吗?

提前致谢。

Ali*_*F50 8

您需要模拟window对象进行单元测试,否则就像您所说的,您将面临这个问题。

您需要为 中的项目执行类似AppModule的操作。

然后在您的服务中,将窗口服务注入构造函数中。

constructor(@Inject('Window') window: Window) {}
login() {
  const endPoint = environmment.myEndpoint;
  this.window.location.href = endpoint + '/myPath/login';
}
Run Code Online (Sandbox Code Playgroud)
// mock the window object
let mockWindow = { location: { href: '' } };

TestBed.configureTestingModule({
  ...
  providers: [
    // provide the mock for 'Window' injection token.
    { provide: 'Window', useValue: mockWindow }
  ]
  ...
});
Run Code Online (Sandbox Code Playgroud)

一旦您模拟了窗口对象,您就不应该面临测试随机失败的问题。