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?
currentVal = 0; describe("Different Methods of Expect Block",function () { it("Example of toBeDefined", function () { expect(currentVal). toBeDefined(); }); }); In the above code, toBeDefined() will check whether the variable currentVal is defined in the system or not.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With