vendredi 11 août 2017

Test if function returns an observable (Jasmine)

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