From d1f4f13c8febb67fddc13cdad2c6a2ea0da3ade5 Mon Sep 17 00:00:00 2001 From: Tim Deschryver <28659384+timdeschryver@users.noreply.github.com> Date: Wed, 8 Mar 2023 19:42:03 +0100 Subject: [PATCH 1/2] docs: reproduce #373 --- .../src/app/issues/issue-373.spec.ts | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 apps/example-app/src/app/issues/issue-373.spec.ts diff --git a/apps/example-app/src/app/issues/issue-373.spec.ts b/apps/example-app/src/app/issues/issue-373.spec.ts new file mode 100644 index 0000000..57959cc --- /dev/null +++ b/apps/example-app/src/app/issues/issue-373.spec.ts @@ -0,0 +1,69 @@ +import { Component } from '@angular/core'; +import { FormBuilder, FormControl, FormGroup, Validators, ReactiveFormsModule } from '@angular/forms'; +import userEvent from '@testing-library/user-event'; +import { render, screen } from '@testing-library/angular'; + +@Component({ + selector: 'app-login', + template: `

Login

+ +
+ +
+
Email is required
+
+ +
+
Password is required
+
+ +
`, +}) +class LoginComponent { + form: FormGroup = this.fb.group({ + email: ['', [Validators.required]], + password: ['', [Validators.required]], + }); + + constructor(private fb: FormBuilder) {} + + get email(): FormControl { + return this.form.get('email') as FormControl; + } + + get password(): FormControl { + return this.form.get('password') as FormControl; + } + + onSubmit(_fg: FormGroup): void { + // do nothing + } +} + +describe('LoginComponent', () => { + const setup = async () => { + return render(LoginComponent, { + imports: [ReactiveFormsModule], + }); + }; + + it('should create a component with inputs and a button to submit', async () => { + await setup(); + + expect(screen.getByRole('textbox', { name: 'email' })).toBeInTheDocument(); + expect(screen.getByLabelText('password')).toBeInTheDocument(); + expect(screen.getByRole('button', { name: 'submit' })).toBeInTheDocument(); + }); + + it('should show a message required to password and login and a button must be disabled', async () => { + await setup(); + + await userEvent.click(screen.getByRole('textbox', { name: 'email' })); + await userEvent.click(screen.getByLabelText('password')); + await userEvent.tab(); + await userEvent.click(screen.getByRole('button', { name: 'submit' })); + + expect(screen.getAllByText(/required/i)).toHaveLength(2); + expect(screen.getByRole('button', { name: 'submit' })).toBeDisabled(); + }); +}); From 9ec261109d5112a2a95343bc93c043691627555b Mon Sep 17 00:00:00 2001 From: Tim Deschryver <28659384+timdeschryver@users.noreply.github.com> Date: Wed, 8 Mar 2023 20:03:02 +0100 Subject: [PATCH 2/2] move test to karma --- .../src/app/issues/issue-373.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename apps/{example-app => example-app-karma}/src/app/issues/issue-373.spec.ts (97%) diff --git a/apps/example-app/src/app/issues/issue-373.spec.ts b/apps/example-app-karma/src/app/issues/issue-373.spec.ts similarity index 97% rename from apps/example-app/src/app/issues/issue-373.spec.ts rename to apps/example-app-karma/src/app/issues/issue-373.spec.ts index 57959cc..cdbd0cc 100644 --- a/apps/example-app/src/app/issues/issue-373.spec.ts +++ b/apps/example-app-karma/src/app/issues/issue-373.spec.ts @@ -63,7 +63,7 @@ describe('LoginComponent', () => { await userEvent.tab(); await userEvent.click(screen.getByRole('button', { name: 'submit' })); - expect(screen.getAllByText(/required/i)).toHaveLength(2); + expect(screen.getAllByText(/required/i).length).toBe(2); expect(screen.getByRole('button', { name: 'submit' })).toBeDisabled(); }); });