Skip to content

Commit 4cb5e5c

Browse files
feat: add userEvent
2 parents 0438b77 + 03f566c commit 4cb5e5c

File tree

3 files changed

+21
-13
lines changed

3 files changed

+21
-13
lines changed

projects/testing-library/src/lib/testing-library.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ function detectChangesForMountedFixtures() {
292292
mountedFixtures.forEach(fixture => fixture.detectChanges());
293293
}
294294

295+
// wrap dom-fireEvent with a change detection cycle
295296
const fireEvent = Object.keys(dtlFireEvent).reduce(
296297
(events, key) => {
297298
events[key] = (element: HTMLElement, options?: {}) => {
@@ -306,6 +307,13 @@ const fireEvent = Object.keys(dtlFireEvent).reduce(
306307

307308
const screen = replaceFindWithFindAndDetectChanges(document.body, dtlScreen);
308309

310+
// wrap user-events with the correct fireEvents
311+
const userEvent = {
312+
type: createType(fireEvent),
313+
selectOptions: createSelectOptions(fireEvent),
314+
tab: tab,
315+
};
316+
309317
// manually export otherwise we get the following error while running Jest tests
310318
// TypeError: Cannot set property fireEvent of [object Object] which has only a getter
311319
// exports.fireEvent = fireEvent;
@@ -382,4 +390,4 @@ export {
382390
within,
383391
} from '@testing-library/dom';
384392

385-
export { fireEvent, screen };
393+
export { fireEvent, screen, userEvent };

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

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { ReactiveFormsModule } from '@angular/forms';
2-
import { render, screen, fireEvent } from '@testing-library/angular';
2+
import { render, screen, fireEvent, userEvent } from '@testing-library/angular';
33

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 { type, selectOptions } = await render(FormsComponent, {
7+
await render(FormsComponent, {
88
imports: [ReactiveFormsModule],
99
});
1010

@@ -18,17 +18,17 @@ test('is possible to fill in a form and verify error messages (with the help of
1818
expect(errors).toContainElement(screen.queryByText('color is required'));
1919

2020
expect(nameControl).toBeInvalid();
21-
type(nameControl, 'Tim');
22-
type(scoreControl, '12');
21+
userEvent.type(nameControl, 'Tim');
22+
userEvent.type(scoreControl, '12');
2323
fireEvent.blur(scoreControl);
24-
selectOptions(colorControl, 'Green');
24+
userEvent.selectOptions(colorControl, 'Green');
2525

2626
expect(screen.queryByText('name is required')).not.toBeInTheDocument();
2727
expect(screen.queryByText('score must be lesser than 10')).toBeInTheDocument();
2828
expect(screen.queryByText('color is required')).not.toBeInTheDocument();
2929

3030
expect(scoreControl).toBeInvalid();
31-
type(scoreControl, 7);
31+
userEvent.type(scoreControl, 7);
3232
fireEvent.blur(scoreControl);
3333
expect(scoreControl).toBeValid();
3434

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

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { ReactiveFormsModule } from '@angular/forms';
2-
import { render, screen } from '@testing-library/angular';
2+
import { render, screen, userEvent } from '@testing-library/angular';
33

44
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 { type, selectOptions, fixture } = await render(MaterialFormsComponent, {
8+
const { fixture } = await render(MaterialFormsComponent, {
99
imports: [ReactiveFormsModule, MaterialModule],
1010
});
1111

@@ -18,16 +18,16 @@ test('is possible to fill in a form and verify error messages (with the help of
1818
expect(errors).toContainElement(screen.queryByText('score must be greater than 1'));
1919
expect(errors).toContainElement(screen.queryByText('color is required'));
2020

21-
type(nameControl, 'Tim');
22-
type(scoreControl, 12);
23-
selectOptions(colorControl, 'Green');
21+
userEvent.type(nameControl, 'Tim');
22+
userEvent.type(scoreControl, 12);
23+
userEvent.selectOptions(colorControl, 'Green');
2424

2525
expect(screen.queryByText('name is required')).not.toBeInTheDocument();
2626
expect(screen.queryByText('score must be lesser than 10')).toBeInTheDocument();
2727
expect(screen.queryByText('color is required')).not.toBeInTheDocument();
2828

2929
expect(scoreControl).toBeInvalid();
30-
type(scoreControl, 7);
30+
userEvent.type(scoreControl, 7);
3131
expect(scoreControl).toBeValid();
3232

3333
expect(errors).not.toBeInTheDocument();

0 commit comments

Comments
 (0)