I am trying to write a simple test that checks if the following method in my Angular app returns an Observable:
generateTemplate(page: Page, deviceType: string): Observable<string> {
return Observable.create((observer: any) => {
// do something with result.
let templateString = this.generateTemplatePrivate(page, deviceType);
observer.next(templateString);
// call complete if you want to close this stream (like a promise)
observer.complete();
});
}
I have written the following test:
describe('DefaultLayoutGeneratorService', () => {
let defaultLayoutGeneratorService: DefaultLayoutGeneratorService;
beforeEach( () => {
defaultLayoutGeneratorService = new DefaultLayoutGeneratorService;
});
it('generateTemplate should return an Observable', () => {
let page = {
id: '9',
name: 'somepage2'
};
let deviceType: 'device';
spyOn(defaultLayoutGeneratorService, 'generateTemplate').and.callThrough();
defaultLayoutGeneratorService.generateTemplate(<Page>page, deviceType)
.subscribe( (observer) => { expect(observer).toBe( jasmine.any(Object) );
});
});
});
});
This test fails and my log reads: 'TypeError: Cannot read property 'undefined' of undefined'
I the think issue here is my lack of experience with RxJS and observables and exactly how they "return" values (or rather "push" values), I am also new to jasmine. Here I am just checking type, but I would also like to test for specific values.
Aucun commentaire:
Enregistrer un commentaire