2017-12-22 43 views
0

각도 서비스를 테스트하는 데 문제가 있습니다. 이 서비스가 올바르게 주입 된 다른 서비스를 호출하는지 확인하고 싶습니다.jasmine angular2를 사용하여 개인 서비스로 유닛 테스트를 실시했습니다.

ServiceToTest의 .service.ts

@Injectable() 
 
export class ServiceToTest { 
 
    constructor(private _si: ServiceInjected) {} 
 
    public init() { 
 
     this._si.configure(); 
 
    } 
 

 
}

ServiceInjected.service.ts

@Injectable() 
 
export class ServiceInjected { 
 
    constructor() {} 
 
    public configure() { 
 
    /*Some actions*/ 
 
    } 
 

 
}

:

내가 ServiceInjected을 주입이 ServiceToTest가 있다고 가정하자 이러한 서비스와

은, 지금은 내 단위 테스트를 작성 :

const serviceInjectedStub = { 
 
    configure(): void {} 
 
} 
 

 

 
describe('ServiceToTest service Test',() => { 
 
    beforeEach(() => { 
 
    TestBed.configureTestingModule({ 
 
     providers: [ServiceToTest , 
 
     { provide: ServiceInjected, useValue: serviceInjectedStub }] 
 
    }); 
 
    }); 
 
    
 
    it('should be initialize the service injected', inject([ServiceToTest], 
 
    (tService: ServiceToTest) => { 
 
     spyOn(serviceInjectedStub, 'configure'); 
 
     tService.init(); 
 
     expect(serviceInjectedStub.configure).toHaveBeenCalled(); 
 
    }));

내 검사가 양성 될 것으로 예상

그러나 나는 다음과 같은 오류가 나타납니다

예상 스파이 구성하는 방법을 가 호출되었습니다.

private _si: ServiceInjected by public si: ServiceInjected 
+0

이 https://github.com/angular/angular/issues/10788 참조 그것에 당신의 테스트 베드

beforeEach(() => { TestBed.configureTestingModule({ providers: [ServiceToTest , { provide: ServiceInjected, useValue: serviceInjectedStub }] }); injectedService = TestBed.get(ServiceInjected); }); 

그리고 테스트에서 서비스를 가져옵니다. 당신은 단순히 실제 서비스와 스파이를 주입 할 수 있습니다. 또는 DI를 전혀 사용하지 않고'new ServiceToTest (stub)'을 사용하여 서비스를 테스트하십시오. 또는 문제에서 설명한대로 useFactory를 사용하십시오. –

답변

1

귀하는 귀하의 TestBed와 관련된 서비스에 대해 간첩하지 않습니다.

spyOn(injectedService, 'configure').and.returnValue(/* return same data type here */); 
// ... 
expect(injectedService.configure).toHaveBeenCalled(); 
+0

Thx 젠체하는 사람! 오늘은 17시에 휴일이야! : p – RjHiruma

+0

문제 없습니다, 즐길 수 있습니다 : D – trichetriche

0

사용이 : :이 방법으로 주입 된 서비스를 공개로 설정하면 다른 한편으로

, 그것은 확인을 작동합니다.

spyOn (serviceInjectedStub, '구성') and.returnValue을 (config);

class MockAuthService extends AuthService { 
    isAuthenticated() { 
    return 'Mocked'; 
    } 
} 

당신이 테스트하고 다른에 초점을하지 않는 서비스를 제어 할 수 있습니다 이런 식으로 : // 설정은 모의

-1

당신은 사용해야 모의 서비스 등이다.

이제 서비스가 올바르게 호출되고 있는지 확인하려면 모의 서비스가 호출 될 때마다 true로 설정된 모의 변수를 추가 할 수 있습니다.