11.12.2023

Testing im Frontend - Ein Erfahrungsbericht zu Komponenten-, Integrations- und End-to-End-Tests

von Thomas Czogalik

Graphik Testing im Frontend - Ein Erfahrungsbericht zu Komponenten-, Integrations- und End-to-End-Tests
@Component({
  // (1)
  template: `
    <button (click)="increment()">Increment</button>
    <button (click)="decrement()">Decrement</button>
    <p data-testid="value">Current Count: {{ count() }}</p>
  `,
})
// (2)
export class CounterComponent {
  count = signal(0);

  decrement() {
   this.count.update(value => value - 1);
  }

  increment() {
    this.count.update(value => value + 1);
  }
}
it('should increment', () => {
  // (1)
  expect(counterComponent.count()).toEqual(0);
  // (2)
  counterComponent.increment();
  // (3)
  expect(counterComponent.count()).toEqual(1);
});

it('should decrement', () => {
  // (1)
  expect(counterComponent.count()).toEqual(0);
  // (2)
  counterComponent.decrement();
  // (3)
  expect(counterComponent.count()).toEqual(-1);
});
it('renders the current value and increment', () => {
  // (1)
  const incrementControl = screen.getByRole('button', {name: /increment/i});
  let valueControl = screen.getByTestId('value');
  // (2)
  expect(valueControl).toHaveTextContent('Current Count: 0');
  // (3)
  fireEvent.click(incrementControl);
  // (4)
  expect(valueControl).toHaveTextContent('Current Count: 1');
});
<div>
  <h1>{{ title }} app is running!</h1>
</div>

<app-counter></app-counter>
await render(AppComponent, 
  {
    declarations:[CounterComponent]
  }
);
it('should increment', () => {
  // (1)
  cy.get('[data-testid="value"]').contains("Current Count: 0")
  // (2)
  cy.get('app-counter > :nth-child(1)').click()
  // (3)
  cy.get('[data-testid="value"]').contains("Current Count: 1")
})
TeststrategieVor- und Nachteile

Beitrag von

Thomas Czogalik
Thomas Czogalik

Thomas ist agiler Software-Entwickler. Mithilfe agiler Methoden, automatisierter Tests und Clean-Code Prinzipien unterstützt er Teams, indem er verständlichen und wartbaren Code schreibt.

Weitere Blog-Beiträge

Loading...