From 20a7e6a8483966ea4d1136d647fddfce2fcc4faa Mon Sep 17 00:00:00 2001 From: Tim Deschryver <28659384+timdeschryver@users.noreply.github.com> Date: Fri, 19 May 2023 13:15:36 +0200 Subject: [PATCH 1/2] test: add test case for #386 (#387) --- .../tests/issues/issue-386.spec.ts | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 projects/testing-library/tests/issues/issue-386.spec.ts diff --git a/projects/testing-library/tests/issues/issue-386.spec.ts b/projects/testing-library/tests/issues/issue-386.spec.ts new file mode 100644 index 0000000..cccc850 --- /dev/null +++ b/projects/testing-library/tests/issues/issue-386.spec.ts @@ -0,0 +1,37 @@ +import {Component} from '@angular/core'; +import {throwError} from 'rxjs'; +import {render, screen} from '@testing-library/angular'; +import userEvent from '@testing-library/user-event'; + +@Component({ + selector: 'app-test', + template: ``, + styles: [], +}) +export class TestComponent { + onTest() { + throwError(() => new Error('myerror')).subscribe(); + } +} + + +describe('TestComponent', () => { + beforeEach(() => { + jest.useFakeTimers(); + }); + + afterEach(() => { + jest.runAllTicks(); + jest.useRealTimers(); + }) + + it('does not fail', async () => { + await render(TestComponent); + await userEvent.click(screen.getByText('Test')); + }); + + it('fails because of the previous one', async () => { + await render(TestComponent); + await userEvent.click(screen.getByText('Test')); + }); +}); From e4a9a844673f74982ee73a842a542a7fef86380f Mon Sep 17 00:00:00 2001 From: Tim Deschryver <28659384+timdeschryver@users.noreply.github.com> Date: Mon, 29 May 2023 19:14:50 +0200 Subject: [PATCH 2/2] fix: allow input properties to be aliased (#391) --- projects/testing-library/src/lib/models.ts | 2 +- .../tests/issues/issue-386.spec.ts | 13 ++++++------- .../tests/issues/issue-389.spec.ts | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 8 deletions(-) create mode 100644 projects/testing-library/tests/issues/issue-389.spec.ts diff --git a/projects/testing-library/src/lib/models.ts b/projects/testing-library/src/lib/models.ts index 0a9b78a..c1c68c2 100644 --- a/projects/testing-library/src/lib/models.ts +++ b/projects/testing-library/src/lib/models.ts @@ -196,7 +196,7 @@ export interface RenderComponentOptions; + componentInputs?: Partial | { [alias: string]: unknown }; /** * @description * An object to set `@Output` properties of the component diff --git a/projects/testing-library/tests/issues/issue-386.spec.ts b/projects/testing-library/tests/issues/issue-386.spec.ts index cccc850..a2a4786 100644 --- a/projects/testing-library/tests/issues/issue-386.spec.ts +++ b/projects/testing-library/tests/issues/issue-386.spec.ts @@ -1,20 +1,19 @@ -import {Component} from '@angular/core'; -import {throwError} from 'rxjs'; -import {render, screen} from '@testing-library/angular'; +import { Component } from '@angular/core'; +import { throwError } from 'rxjs'; import userEvent from '@testing-library/user-event'; +import { render, screen } from '../../src/public_api'; @Component({ - selector: 'app-test', + selector: 'atl-fixture', template: ``, styles: [], }) -export class TestComponent { +class TestComponent { onTest() { throwError(() => new Error('myerror')).subscribe(); } } - describe('TestComponent', () => { beforeEach(() => { jest.useFakeTimers(); @@ -23,7 +22,7 @@ describe('TestComponent', () => { afterEach(() => { jest.runAllTicks(); jest.useRealTimers(); - }) + }); it('does not fail', async () => { await render(TestComponent); diff --git a/projects/testing-library/tests/issues/issue-389.spec.ts b/projects/testing-library/tests/issues/issue-389.spec.ts new file mode 100644 index 0000000..03f25f7 --- /dev/null +++ b/projects/testing-library/tests/issues/issue-389.spec.ts @@ -0,0 +1,16 @@ +import { Component, Input } from '@angular/core'; +import { render, screen } from '../../src/public_api'; + +@Component({ + selector: 'atl-fixture', + template: `Hello {{ name }}`, +}) +class TestComponent { + // eslint-disable-next-line @angular-eslint/no-input-rename + @Input('aliasName') name = ''; +} + +test('allows you to set componentInputs using the name alias', async () => { + await render(TestComponent, { componentInputs: { aliasName: 'test' } }); + expect(screen.getByText('Hello test')).toBeInTheDocument(); +});