Skip to content

Commit 72a4d3c

Browse files
authored
chore: update user event usage in specs (#395)
Closes #394
1 parent da983a9 commit 72a4d3c

20 files changed

+154
-90
lines changed

.githooks/pre-commit

100644100755
File mode changed.
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
import { render, screen, fireEvent } from '@testing-library/angular';
1+
import { render, screen } from '@testing-library/angular';
2+
import userEvent from '@testing-library/user-event';
23

34
import { SingleComponent } from './00-single-component';
45

56
test('renders the current value and can increment and decrement', async () => {
7+
const user = userEvent.setup();
68
await render(SingleComponent);
79

810
const incrementControl = screen.getByRole('button', { name: /increment/i });
@@ -11,10 +13,10 @@ test('renders the current value and can increment and decrement', async () => {
1113

1214
expect(valueControl).toHaveTextContent('0');
1315

14-
fireEvent.click(incrementControl);
15-
fireEvent.click(incrementControl);
16+
await user.click(incrementControl);
17+
await user.click(incrementControl);
1618
expect(valueControl).toHaveTextContent('2');
1719

18-
fireEvent.click(decrementControl);
20+
await user.click(decrementControl);
1921
expect(valueControl).toHaveTextContent('1');
2022
});
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
import { render, screen, fireEvent } from '@testing-library/angular';
1+
import { render, screen } from '@testing-library/angular';
2+
import userEvent from '@testing-library/user-event';
23

34
import { NestedButtonComponent, NestedValueComponent, NestedContainerComponent } from './01-nested-component';
45

56
test('renders the current value and can increment and decrement', async () => {
7+
const user = userEvent.setup();
68
await render(NestedContainerComponent, {
79
declarations: [NestedButtonComponent, NestedValueComponent],
810
});
@@ -13,10 +15,10 @@ test('renders the current value and can increment and decrement', async () => {
1315

1416
expect(valueControl).toHaveTextContent('0');
1517

16-
fireEvent.click(incrementControl);
17-
fireEvent.click(incrementControl);
18+
await user.click(incrementControl);
19+
await user.click(incrementControl);
1820
expect(valueControl).toHaveTextContent('2');
1921

20-
fireEvent.click(decrementControl);
22+
await user.click(decrementControl);
2123
expect(valueControl).toHaveTextContent('1');
2224
});

apps/example-app/src/app/examples/02-input-output.spec.ts

+12-9
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
import { render, screen, fireEvent } from '@testing-library/angular';
1+
import { render, screen } from '@testing-library/angular';
2+
import userEvent from '@testing-library/user-event';
23

34
import { InputOutputComponent } from './02-input-output';
45

56
test('is possible to set input and listen for output', async () => {
7+
const user = userEvent.setup();
68
const sendValue = jest.fn();
79

810
await render(InputOutputComponent, {
@@ -22,17 +24,18 @@ test('is possible to set input and listen for output', async () => {
2224

2325
expect(valueControl).toHaveTextContent('47');
2426

25-
fireEvent.click(incrementControl);
26-
fireEvent.click(incrementControl);
27-
fireEvent.click(incrementControl);
27+
await user.click(incrementControl);
28+
await user.click(incrementControl);
29+
await user.click(incrementControl);
2830
expect(valueControl).toHaveTextContent('50');
2931

30-
fireEvent.click(sendControl);
32+
await user.click(sendControl);
3133
expect(sendValue).toHaveBeenCalledTimes(1);
3234
expect(sendValue).toHaveBeenCalledWith(50);
3335
});
3436

3537
test('is possible to set input and listen for output with the template syntax', async () => {
38+
const user = userEvent.setup();
3639
const sendSpy = jest.fn();
3740

3841
await render('<app-fixture [value]="47" (sendValue)="sendValue($event)" (clicked)="clicked()"></app-fixture>', {
@@ -48,12 +51,12 @@ test('is possible to set input and listen for output with the template syntax',
4851

4952
expect(valueControl).toHaveTextContent('47');
5053

51-
fireEvent.click(incrementControl);
52-
fireEvent.click(incrementControl);
53-
fireEvent.click(incrementControl);
54+
await user.click(incrementControl);
55+
await user.click(incrementControl);
56+
await user.click(incrementControl);
5457
expect(valueControl).toHaveTextContent('50');
5558

56-
fireEvent.click(sendControl);
59+
await user.click(sendControl);
5760
expect(sendSpy).toHaveBeenCalledTimes(1);
5861
expect(sendSpy).toHaveBeenCalledWith(50);
5962
});

apps/example-app/src/app/examples/03-forms.spec.ts

+7-6
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import userEvent from '@testing-library/user-event';
44
import { FormsComponent } from './03-forms';
55

66
test('is possible to fill in a form and verify error messages (with the help of jest-dom https://testing-library.com/docs/ecosystem-jest-dom)', async () => {
7+
const user = userEvent.setup();
78
await render(FormsComponent);
89

910
const nameControl = screen.getByRole('textbox', { name: /name/i });
@@ -16,19 +17,19 @@ test('is possible to fill in a form and verify error messages (with the help of
1617
expect(errors).toContainElement(screen.queryByText('color is required'));
1718

1819
expect(nameControl).toBeInvalid();
19-
userEvent.type(nameControl, 'Tim');
20-
userEvent.clear(scoreControl);
21-
userEvent.type(scoreControl, '12');
20+
await user.type(nameControl, 'Tim');
21+
await user.clear(scoreControl);
22+
await user.type(scoreControl, '12');
2223
fireEvent.blur(scoreControl);
23-
userEvent.selectOptions(colorControl, 'G');
24+
await user.selectOptions(colorControl, 'G');
2425

2526
expect(screen.queryByText('name is required')).not.toBeInTheDocument();
2627
expect(screen.getByText('score must be lesser than 10')).toBeInTheDocument();
2728
expect(screen.queryByText('color is required')).not.toBeInTheDocument();
2829

2930
expect(scoreControl).toBeInvalid();
30-
userEvent.clear(scoreControl);
31-
userEvent.type(scoreControl, '7');
31+
await user.clear(scoreControl);
32+
await user.type(scoreControl, '7');
3233
fireEvent.blur(scoreControl);
3334
expect(scoreControl).toBeValid();
3435

apps/example-app/src/app/examples/04-forms-with-material.spec.ts

+14-10
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import { MaterialModule } from '../material.module';
55
import { MaterialFormsComponent } from './04-forms-with-material';
66

77
test('is possible to fill in a form and verify error messages (with the help of jest-dom https://testing-library.com/docs/ecosystem-jest-dom)', async () => {
8+
const user = userEvent.setup();
9+
810
const { fixture } = await render(MaterialFormsComponent, {
911
imports: [MaterialModule],
1012
});
@@ -22,14 +24,14 @@ test('is possible to fill in a form and verify error messages (with the help of
2224
expect(errors).toContainElement(screen.queryByText('color is required'));
2325
expect(errors).toContainElement(screen.queryByText('agree is required'));
2426

25-
userEvent.type(nameControl, 'Tim');
26-
userEvent.clear(scoreControl);
27-
userEvent.type(scoreControl, '12');
28-
userEvent.click(colorControl);
29-
userEvent.click(screen.getByText(/green/i));
27+
await user.type(nameControl, 'Tim');
28+
await user.clear(scoreControl);
29+
await user.type(scoreControl, '12');
30+
await user.click(colorControl);
31+
await user.click(screen.getByText(/green/i));
3032

3133
expect(checkboxControl).not.toBeChecked();
32-
userEvent.click(checkboxControl);
34+
await user.click(checkboxControl);
3335
expect(checkboxControl).toBeChecked();
3436
expect(checkboxControl).toBeValid();
3537

@@ -39,11 +41,11 @@ test('is possible to fill in a form and verify error messages (with the help of
3941
expect(screen.queryByText('agree is required')).not.toBeInTheDocument();
4042

4143
expect(scoreControl).toBeInvalid();
42-
userEvent.clear(scoreControl);
43-
userEvent.type(scoreControl, '7');
44+
await user.clear(scoreControl);
45+
await user.type(scoreControl, '7');
4446
expect(scoreControl).toBeValid();
4547

46-
userEvent.type(dateControl, '08/11/2022');
48+
await user.type(dateControl, '08/11/2022');
4749

4850
expect(errors).not.toBeInTheDocument();
4951

@@ -65,6 +67,8 @@ test('is possible to fill in a form and verify error messages (with the help of
6567
});
6668

6769
test('set and show pre-set form values', async () => {
70+
const user = userEvent.setup();
71+
6872
const { fixture, detectChanges } = await render(MaterialFormsComponent, {
6973
imports: [MaterialModule],
7074
});
@@ -87,7 +91,7 @@ test('set and show pre-set form values', async () => {
8791
expect(scoreControl).toHaveValue(4);
8892
expect(colorControl).toHaveTextContent('Blue');
8993
expect(checkboxControl).toBeChecked();
90-
userEvent.click(checkboxControl);
94+
await user.click(checkboxControl);
9195

9296
const form = screen.getByRole('form');
9397
expect(form).toHaveFormValues({

apps/example-app/src/app/examples/05-component-provider.spec.ts

+17-10
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
import { TestBed } from '@angular/core/testing';
2-
import { render, screen, fireEvent } from '@testing-library/angular';
2+
import { render, screen } from '@testing-library/angular';
33
import { provideMock, Mock, createMock } from '@testing-library/angular/jest-utils';
4+
import userEvent from '@testing-library/user-event';
45

56
import { ComponentWithProviderComponent, CounterService } from './05-component-provider';
67

78
test('renders the current value and can increment and decrement', async () => {
9+
const user = userEvent.setup();
10+
811
await render(ComponentWithProviderComponent, {
912
componentProviders: [
1013
{
@@ -20,15 +23,17 @@ test('renders the current value and can increment and decrement', async () => {
2023

2124
expect(valueControl).toHaveTextContent('0');
2225

23-
fireEvent.click(incrementControl);
24-
fireEvent.click(incrementControl);
26+
await user.click(incrementControl);
27+
await user.click(incrementControl);
2528
expect(valueControl).toHaveTextContent('2');
2629

27-
fireEvent.click(decrementControl);
30+
await user.click(decrementControl);
2831
expect(valueControl).toHaveTextContent('1');
2932
});
3033

3134
test('renders the current value and can increment and decrement with a mocked jest-utils service', async () => {
35+
const user = userEvent.setup();
36+
3237
const counter = createMock(CounterService);
3338
let fakeCounterValue = 50;
3439
counter.increment.mockImplementation(() => (fakeCounterValue += 10));
@@ -50,25 +55,27 @@ test('renders the current value and can increment and decrement with a mocked je
5055

5156
expect(valueControl).toHaveTextContent('50');
5257

53-
fireEvent.click(incrementControl);
54-
fireEvent.click(incrementControl);
58+
await user.click(incrementControl);
59+
await user.click(incrementControl);
5560
expect(valueControl).toHaveTextContent('70');
5661

57-
fireEvent.click(decrementControl);
62+
await user.click(decrementControl);
5863
expect(valueControl).toHaveTextContent('60');
5964
});
6065

6166
test('renders the current value and can increment and decrement with provideMocked from jest-utils', async () => {
67+
const user = userEvent.setup();
68+
6269
await render(ComponentWithProviderComponent, {
6370
componentProviders: [provideMock(CounterService)],
6471
});
6572

6673
const incrementControl = screen.getByRole('button', { name: /increment/i });
6774
const decrementControl = screen.getByRole('button', { name: /decrement/i });
6875

69-
fireEvent.click(incrementControl);
70-
fireEvent.click(incrementControl);
71-
fireEvent.click(decrementControl);
76+
await user.click(incrementControl);
77+
await user.click(incrementControl);
78+
await user.click(decrementControl);
7279

7380
const counterService = TestBed.inject(CounterService) as Mock<CounterService>;
7481
expect(counterService.increment).toHaveBeenCalledTimes(2);

apps/example-app/src/app/examples/06-with-ngrx-store.spec.ts

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
import { render, screen, fireEvent } from '@testing-library/angular';
1+
import { render, screen } from '@testing-library/angular';
22
import { StoreModule } from '@ngrx/store';
3+
import userEvent from '@testing-library/user-event';
34

45
import { WithNgRxStoreComponent, reducer } from './06-with-ngrx-store';
56

67
test('works with ngrx store', async () => {
8+
const user = userEvent.setup();
9+
710
await render(WithNgRxStoreComponent, {
811
imports: [
912
StoreModule.forRoot(
@@ -23,10 +26,10 @@ test('works with ngrx store', async () => {
2326

2427
expect(valueControl).toHaveTextContent('0');
2528

26-
fireEvent.click(incrementControl);
27-
fireEvent.click(incrementControl);
29+
await user.click(incrementControl);
30+
await user.click(incrementControl);
2831
expect(valueControl).toHaveTextContent('20');
2932

30-
fireEvent.click(decrementControl);
33+
await user.click(decrementControl);
3134
expect(valueControl).toHaveTextContent('10');
3235
});

apps/example-app/src/app/examples/07-with-ngrx-mock-store.spec.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
import { TestBed } from '@angular/core/testing';
22
import { provideMockStore, MockStore } from '@ngrx/store/testing';
3-
import { render, screen, fireEvent } from '@testing-library/angular';
3+
import { render, screen } from '@testing-library/angular';
4+
import userEvent from '@testing-library/user-event';
45

56
import { WithNgRxMockStoreComponent, selectItems } from './07-with-ngrx-mock-store';
67

78
test('works with provideMockStore', async () => {
9+
const user = userEvent.setup();
10+
811
await render(WithNgRxMockStoreComponent, {
912
providers: [
1013
provideMockStore({
@@ -21,7 +24,7 @@ test('works with provideMockStore', async () => {
2124
const store = TestBed.inject(MockStore);
2225
store.dispatch = jest.fn();
2326

24-
fireEvent.click(screen.getByText(/seven/i));
27+
await user.click(screen.getByText(/seven/i));
2528

2629
expect(store.dispatch).toHaveBeenCalledWith({ type: '[Item List] send', item: 'Seven' });
2730
});

apps/example-app/src/app/examples/08-directive.spec.ts

+12-7
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1-
import { render, screen, fireEvent } from '@testing-library/angular';
1+
import { render, screen } from '@testing-library/angular';
2+
import userEvent from '@testing-library/user-event';
23

34
import { SpoilerDirective } from './08-directive';
45

56
test('it is possible to test directives', async () => {
7+
const user = userEvent.setup();
8+
69
await render('<div appSpoiler data-testid="dir"></div>', {
710
declarations: [SpoilerDirective],
811
});
@@ -12,16 +15,17 @@ test('it is possible to test directives', async () => {
1215
expect(screen.queryByText('I am visible now...')).not.toBeInTheDocument();
1316
expect(screen.getByText('SPOILER')).toBeInTheDocument();
1417

15-
fireEvent.mouseOver(directive);
18+
await user.hover(directive);
1619
expect(screen.queryByText('SPOILER')).not.toBeInTheDocument();
1720
expect(screen.getByText('I am visible now...')).toBeInTheDocument();
1821

19-
fireEvent.mouseLeave(directive);
22+
await user.unhover(directive);
2023
expect(screen.getByText('SPOILER')).toBeInTheDocument();
2124
expect(screen.queryByText('I am visible now...')).not.toBeInTheDocument();
2225
});
2326

2427
test('it is possible to test directives with props', async () => {
28+
const user = userEvent.setup();
2529
const hidden = 'SPOILER ALERT';
2630
const visible = 'There is nothing to see here ...';
2731

@@ -36,16 +40,17 @@ test('it is possible to test directives with props', async () => {
3640
expect(screen.queryByText(visible)).not.toBeInTheDocument();
3741
expect(screen.getByText(hidden)).toBeInTheDocument();
3842

39-
fireEvent.mouseOver(screen.getByText(hidden));
43+
await user.hover(screen.getByText(hidden));
4044
expect(screen.queryByText(hidden)).not.toBeInTheDocument();
4145
expect(screen.getByText(visible)).toBeInTheDocument();
4246

43-
fireEvent.mouseLeave(screen.getByText(visible));
47+
await user.unhover(screen.getByText(visible));
4448
expect(screen.getByText(hidden)).toBeInTheDocument();
4549
expect(screen.queryByText(visible)).not.toBeInTheDocument();
4650
});
4751

4852
test('it is possible to test directives with props in template', async () => {
53+
const user = userEvent.setup();
4954
const hidden = 'SPOILER ALERT';
5055
const visible = 'There is nothing to see here ...';
5156

@@ -56,11 +61,11 @@ test('it is possible to test directives with props in template', async () => {
5661
expect(screen.queryByText(visible)).not.toBeInTheDocument();
5762
expect(screen.getByText(hidden)).toBeInTheDocument();
5863

59-
fireEvent.mouseOver(screen.getByText(hidden));
64+
await user.hover(screen.getByText(hidden));
6065
expect(screen.queryByText(hidden)).not.toBeInTheDocument();
6166
expect(screen.getByText(visible)).toBeInTheDocument();
6267

63-
fireEvent.mouseLeave(screen.getByText(visible));
68+
await user.unhover(screen.getByText(visible));
6469
expect(screen.getByText(hidden)).toBeInTheDocument();
6570
expect(screen.queryByText(visible)).not.toBeInTheDocument();
6671
});

0 commit comments

Comments
 (0)