Я создал службу, которую я пытаюсь написать.
Он использует библиотеку https://github.com/auth0/angular2-jwt. Я предоставляю службу AuthHttp, но скажу, что тест вместо Http
Сама услуга работает нормально, но я изо всех сил пытаюсь написать тест.
Я пытаюсь использовать HttpClientTestingModule из Angular, чтобы высмеивать ответ HTTP и проверять значения, но кажется, что моя функция getLookups в службе никогда не выполняется?
getLookup(id: number): Observable<Lookup[]> {
const _lookups: Subject<Lookup[]> = new Subject();
const lookups: Observable<Lookup[]> = _lookups.asObservable();
this.authHttp.get(this.config.api.baseAPI + '/api/property/' + id + '/lookup')
.subscribe(data => {
const lookupsRaw = data.json();
const lookUpsParsed: Lookup[] = [];
lookupsRaw.forEach((lup) => {
lookUpsParsed.push(new Lookup(lup.id, lup.label));
});
console.log(lookUpsParsed);
_lookups.next(lookUpsParsed);
},
err => console.log('Error!!!!'+ err),
() => console.log('Request Complete!!')
);
return lookups;
}
Это тест, который я строю для запуска
describe('SurveyService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpModule, HttpClientTestingModule],
providers: [
AuthHttp,
SurveyService,
ConfigurationService,
{provide: AuthHttp, useExisting: Http}
]
});
});
afterEach(inject([HttpTestingController], (httpMock: HttpTestingController) => {
httpMock.verify();
}));
it('should be created',
inject([HttpTestingController, SurveyService], (httpMock: HttpTestingController, service: SurveyService) => {
expect(service).toBeTruthy();
service.getLookup(7).subscribe(lookup => {
});
const req = httpMock.expectOne('/api/property/7/lookup');
req.flush({name: 'Test Data'});
}
));
});
Может ли кто-нибудь сказать мне, где я ошибаюсь в этом, пожалуйста?
Спасибо, Уве
попробуйте сделать что-то вроде этого:
it('',async(done)=>{
...
service.getLookup(7).subscribe(lookup => {
expect(...).tobe(...);
done();
});
});
я предполагаю, что, поскольку ваш код является асинхронным, вам нужно дождаться его ответа. Это один из способов сделать это