Angular19 min read

Unit Testing a Component (TestBed + Mock Service)

Write a clean unit test for a component by mocking its service dependency.

Kevin Parker
September 4, 2025
4.8k184

Let’s test a component that loads a username from a service.

## Component

```ts
import { Component } from '@angular/core';
import { UserService } from './user.service';

@Component({
  selector: 'app-greeting',
  standalone: true,
  template: `<h1>Hello {{ name }}</h1>`,
})
export class GreetingComponent {
  name = '';

  constructor(userService: UserService) {
    this.name = userService.getName();
  }
}
```

## Test idea

We do not want to use the real service in a unit test. We mock it.

```ts
import { TestBed } from '@angular/core/testing';
import { GreetingComponent } from './greeting.component';
import { UserService } from './user.service';

describe('GreetingComponent', () => {
  it('shows name from service', () => {
    TestBed.configureTestingModule({
      imports: [GreetingComponent],
      providers: [
        {
          provide: UserService,
          useValue: { getName: () => 'Jessica Miller' },
        },
      ],
    });

    const fixture = TestBed.createComponent(GreetingComponent);
    fixture.detectChanges();

    const el: HTMLElement = fixture.nativeElement;
    expect(el.textContent).toContain('Hello Jessica Miller');
  });
});
```

## Why this is clean

- component is tested in isolation
- predictable output
- fast execution

> Next: HTTP testing with HttpTestingController.
#Angular#Testing#Advanced