diff --git a/apps/example-app-karma/src/app/issues/issue-373.spec.ts b/apps/example-app-karma/src/app/issues/issue-373.spec.ts new file mode 100644 index 00000000..cdbd0ccb --- /dev/null +++ b/apps/example-app-karma/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).length).toBe(2); + expect(screen.getByRole('button', { name: 'submit' })).toBeDisabled(); + }); +}); diff --git a/other/hedgehog.png b/other/hedgehog.png index ce0a940c..3d84640a 100644 Binary files a/other/hedgehog.png and b/other/hedgehog.png differ diff --git a/package.json b/package.json index 1cbf74eb..ff89f736 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "@ngrx/store": "15.1.0", "@nrwl/angular": "15.4.5", "@nrwl/nx-cloud": "15.0.2", - "@testing-library/dom": "^8.19.1", + "@testing-library/dom": "^9.0.0", "rxjs": "7.5.6", "tslib": "~2.3.1", "zone.js": "~0.11.4" diff --git a/projects/testing-library/package.json b/projects/testing-library/package.json index 168d767d..975050c1 100644 --- a/projects/testing-library/package.json +++ b/projects/testing-library/package.json @@ -35,7 +35,7 @@ "@angular/core": ">= 15.1.0" }, "dependencies": { - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "tslib": "^2.3.1" }, "publishConfig": {