angular2 testing using jasmine for subscribe method

angular, karma-jasmine, unit-testing

Solution

You need to return something with a `subscribe` method, as the component calls `subscribe` directly from `login`. A string does not. You could just return an object with a `subscribe` function and it should work

and.returnValue({ subscribe: () => {} });

Or if you want to pass a real observable, you could

and.returnValue(Observable.of('some value'));

You might need to import `rxjs/add/observable/of`

Problem

I have a spec code to test like this ``` it('login test', () => { const fixture = TestBed.createComponent(component); fixture.detectChanges(); let authService = fixture.debugElement.injector.get(Auth); spyOn(authService, 'login').and.returnValue(''); const elements = fixture.nativeElement; fixture.componentInstance.login(); expect(authService.login).toHaveBeenCalled(); }); ``` and the implementation code like this ``` login() { this.auth.login(this.username, this.password).subscribe(() => { } }); } ``` it gives error: this.auth.login(...).subscribe is not a function Why does this error happen?

Original source