Хорошо, проблема вашего подхода в том, что вам нужно использовать useClass
и создать заглушку:
class PpackServiceStub{
formatPacks(){
// return whatever you are expecting, be it promise or Observable using of()
}
// create other methods similary with expected Output
}
и в providers
providers: [
{ provide: ProtocolPackService, useClass: PpackServiceStub },
ToastService
]
Теперь предположим, что вы хотите проверить 2 различных режима обслуживания, затем вам нужно создать spy
. Я возьму пример функции checkIfHuman()
, поэтому добавлю:
class PpackServiceStub{
formatPacks(){
// return whatever you are expecting, be it promise or Observable using of()
}
checkIfHuman(){
return of({val : true})
}
}
с кодом component.ts
как что-то вроде:
ngOnInit() {
this.protocolPackService.checkIfHuman().subscribe(res =>
{
this.humanFlag = res.val
})
}
сделать protocolPackService
как public
в component
конструкторе, чтобы мы могли шпионить в spec
файле, как показано ниже:
it('On ngOnInit should assign value as TRUE', () => {
spyOn(component.protocolPackService, 'checkIfHuman').and.returnValue(of({val: true}));
// you dont even need to create this spy because you already have the same value being returned in "PpackServiceStub"
component.ngOnInit();
expect(component.humanFlag).toBeTruthy();
});
it('On ngOnInit should assign value as FALSE', () => {
spyOn(component.protocolPackService, 'checkIfHuman').and.returnValue(of({val: false}));
component.ngOnInit();
expect(component.humanFlag).toBeFalsy();
});