Angular2测试:更改服务的注入值

时间:2017-03-27 12:10:27

标签: angular angular2-testing

我正在测试一项简单的服务。该服务使用来自其他服务的2个值。

基本上,我想测试这两个值: isLogged = false isLogged = true

是否可以只更改注入服务的值,还是需要执行其他操作? (我不知道,所以如果你能带路我,我会很感激)。

以下是我的测试代码:

编辑我找到了解决问题的方法。您需要将提供程序注入 inject 参数,然后您可以根据需要更改其属性。

  import { TestBed, async, inject } from '@angular/core/testing';
  import { AuthGuardService } from './authguard.service';
  import { Router } from '@angular/router';

  import { AuthService } from './auth.service';

  describe('AuthguardService', () => {

    let calledUrl = '/logged/main/last';

    let authServiceStub = {
      isLogged: false,
      redirectUrl: calledUrl
    };

    class RouterStub {
      navigate(url: string) { return url; }
    };

    beforeEach(() => {
      TestBed.configureTestingModule({
        providers: [
          AuthGuardService,
          { provide: AuthService, useValue: authServiceStub },
          { provide: Router, useClass: RouterStub },
        ]
      });
    });

    it('should ...', inject([AuthGuardService, Router], (service: AuthGuardService, router: Router) => {
      let spy = spyOn(router, 'navigate');

      service.checkLoginState(calledUrl);
      expect(spy).toHaveBeenCalledWith(['/login']);
    }));
  });

0 个答案:

没有答案