如何测试在其他服务中注入的角度服务

时间:2018-12-07 09:56:06

标签: angular5 karma-jasmine

我正在测试angular(1.6.3)中的服务 我的服务依赖于另一项服务。 每次运行ng test时,我都不会获得ServiceName或HTTpclient的提供程序 有帮助吗??? 服务:

export class TraitsService {


 constructor(private gs: GenericService) {}

  getAll(callback: Function) {
    this.gs
      .callGet(`${environment.serviceURL}${environment.serviceConfigAPI.getMyTraits}?active=true`)
      .subscribe(traits => callback(this.flatten(traits)));
  }

测试:

describe('TraitsService', () => {
  let service: TraitsService;
  let gs: GenericService;

  beforeEach(() => {
    TestBed.configureTestingModule({
      providers: [TraitsService, GenericService]
    });
    service = TestBed.get(TraitsService);
    gs = TestBed.get(GenericService);
  });

  it('should be created', inject([TraitsService], (service: TraitsService) => {
    expect(service).toBeTruthy();
  }));

1 个答案:

答案 0 :(得分:1)

Official Documentation中对此进行了广泛处理,但是开始时可能有些吓人。 :)

正如文档所指出的那样,您可以通过多种方法进行测试。我个人倾向于监视原始服务,以孤立地测试正在考虑的服务。我为您整理了Stackblitz,以说明如何在您的情况下进行此操作。

通过该Stackblitz,这是.spec文件中的describe()函数:

describe('TraitsService', () => {
    const mockReturnValue = [1, 2, 3]; // change this!
    const gsSpy = jasmine.createSpyObj('GenericService', ['callGet']);
    gsSpy.callGet.and.returnValue(of(mockReturnValue));
    let service: TraitsService;
    // let gs: GenericService;

    beforeEach(() => {
        TestBed.configureTestingModule({
            providers: [
                TraitsService, 
                { provide: GenericService, useValue: gsSpy }
            ]
        });
        service = TestBed.get(TraitsService);
        // gs = TestBed.get(GenericService);
    });

    it('should be created', inject([TraitsService], (service: TraitsService) => {
        expect(service).toBeTruthy();
    }));
});

您可以在Stackblitz中看到该服务创建正确。我希望这会有所帮助。