Я испытываю множество проблем при попытке проверить сервисный вызов внутри функции компонента Angular 5.
@Component({
selector: 'app-example',
templateUrl: './app-example.html',
styleUrls: ['./app-example.css'],
providers: [ PersistanceService, AnotherService ]
})
export class ExampleComponent {
callPersist: boolean = false;
private simpleObj = {
"name": "a",
"age" : 20
}
constructor(private persistanceService: PersistanceService, anotherService: AnotherService) {}
persist() {
if (this.callPersist)
this.persistanceService.persist(this.simpleObj);
else
this.anotherService.terminate();
}
}
В моих тестах я хочу подтвердить, что при вызове persist () вызывается соответствующая служба.Это мой тестовый пример:
it('should call persistService', () => {
let persistService = TestBed.get(PersistanceService); //this is being declared in TestBed.configureTestingModule
spyOn(persistService, 'persist').and.callThrough(); //create spy
component.callPersist = true; //set flag for persistance
fixture.detectChanges(); //update variables in fixture
component.persist(); //call parent method
expect(persistService.persist).toHaveBeenCalled(); // error
expect(persistService).toHaveBeenCalled(); // error
expect(persistService.calls.any()).toBeTruthy(); //error
});
Независимо от ожидаемого результата, результат всегда будет
Ожидается, что шпион останется вызванным.
Единственная ситуация, когда ожидания оправдываются, - это когда я вызываю шпиона прямо внутри моего контрольного примера.Однако это бесполезно для меня.Я хочу проверить свои сервисные вызовы почти так же, как Mockito использует .verify ();
Есть ли вероятность, что я совершенно не прав в этом?
PS:тесты проходят через Jasmine 2.8.0
Правка: добавление метода beforeEach ()
beforeEach(async() => {
TestBed.configureTestingModule({
declarations: [ ExampleComponent ],
providers: [
PersistanceService,
AnotherService
]
}).compileComponents();
fixture = TestBed.createComponent(ExampleComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});