Search code examples
angulartypescriptunit-testingtestingjasmine

Mocking observable getters and setters in jasmine


Lets say I have some state service in angular

export class StateService {
 private _someProperty: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);

    set someProperty(value: boolean) {
       this._someProperty.next(value);
    }

    get someProperty() {
        return this._someProperty.value;
    }

    get someProperty$() {
        return this._someProperty.asObservable();
    }
}

How can this be mocked correctly in jasmine? Probably something like this but I dont know how to mock these Behaviour Subject getters and setters.

const stateServiceMock = jasmine.createSpyObj('StateService', {
    ...
});

Solution

  • of() from Rxjs will return an observable where the given input value is "observed" immediatly.

    so you can

    spyOnProperty(stateService, 'someProperty$').andReturn(of(false));
    

    dont forget to import "of" from rxjs

    mocking with jasmine:

    rxjs