mardi 5 avril 2016

Jasmine: testing observables with events

I am trying to test an angular2 application. I have a login form, which uses an observable to send data to the backend:

doLogin() {
    this.usersService.login(this.model)
        .subscribe((data) => {
            console.log("In observable: " + data.isSuccess);
            if (!data.isSuccess) {
                this.alerts.push({});
            }
        });
}

In tests I am adding a spy on the service function, which returns observable, so that component can work on it:

 usersService.login.and.returnValue(Observable.of(
    <LoginResponse>{
        isSuccess: true
    }));

When everything is ready, I dispatch an event on submit button, which triggers doLogin function in component:

submitButton.dispatchEvent(new Event("click"));
fixture.detectChanges();

It works correctly. Unfortunately, when I check if usersService.login has been called in the test:

expect(usersService.login).toHaveBeenCalled();

I get an error, because the observable didn't finish and login has not been called yet.

How should I make sure, I check my spy after observable has finished?

Aucun commentaire:

Enregistrer un commentaire