You can simply mock Observable throw error object like Observable.throw({status: 404})
and test error block of observable.
const xService = fixture.debugElement.injector.get(SomeService);
const mockCall = spyOn(xService, 'method').and.returnValue(Observable.throw({status: 404}));
Update 2019 :
Since some people are lazy to read comment let me put this here :
It’s a best practice to use errors for Rxjs
import { throwError } from 'rxjs'; // make sure to import the throwError from rxjs
const xService = fixture.debugElement.injector.get(SomeService);
const mockCall = spyOn(xService,'method').and.returnValue(throwError({status: 404}));
Update 2022:
Use of throwError
in the aforementioned way is deprecated. Instead, use throwError(() => new Error({status: 404}))
:
import { throwError } from 'rxjs'; // make sure to import the throwError from rxjs
const xService = fixture.debugElement.injector.get(SomeService);
const mockCall = spyOn(xService,'method').and.returnValue(throwError(() => new Error({status: 404})));