To mock HttpClient you can use HttpClientTestingModule with HttpTestingController
Sample code to accomplish the same
import { TestBed, ComponentFixture } from '@angular/core/testing';
import { Type } from '@angular/core';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
import { SendSmsComponent } from './send-sms/send-sms.component';
import { ApiService } from '@services/api.service';
describe('SendSmsComponent ', () => {
let fixture: ComponentFixture<SendSmsComponent>;
let app: SendSmsComponent;
let httpMock: HttpTestingController;
describe('SendSmsComponent ', () => {
beforeEach(async () => {
TestBed.configureTestingModule({
imports: [
HttpClientTestingModule,
],
declarations: [
SendSmsComponent,
],
providers: [
ApiService,
],
});
await TestBed.compileComponents();
fixture = TestBed.createComponent(SendSmsComponent);
app = fixture.componentInstance;
httpMock = fixture.debugElement.injector.get<HttpTestingController>(HttpTestingController as Type<HttpTestingController>);
fixture.detectChanges();
});
afterEach(() => {
httpMock.verify();
});
it('test your http call', () => {
const dummyUsers = [
{ name: 'John' },
];
app.getUsers();
const req = httpMock.expectOne(`${url}/users`);
req.flush(dummyUsers);
expect(req.request.method).toBe('GET');
expect(app.users).toEqual(dummyUsers);
});
});
});