From 16d15f94b1ae5f15e1e572693688fc383d13a8fb Mon Sep 17 00:00:00 2001 From: Tim Deschryver <28659384+timdeschryver@users.noreply.github.com> Date: Thu, 3 Sep 2026 21:32:23 +0200 Subject: [PATCH] feat: add zone subpackage --- angular.json | 7 ++++- projects/testing-library/tsconfig.spec.json | 5 +++- projects/testing-library/zone/index.ts | 1 + projects/testing-library/zone/ng-package.json | 1 + .../testing-library/zone/src/public_api.ts | 9 ++++++ .../testing-library/zone/tests/zone.spec.ts | 30 +++++++++++++++++++ 6 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 projects/testing-library/zone/index.ts create mode 100644 projects/testing-library/zone/ng-package.json create mode 100644 projects/testing-library/zone/src/public_api.ts create mode 100644 projects/testing-library/zone/tests/zone.spec.ts diff --git a/angular.json b/angular.json index 5164f45c..b4d070aa 100644 --- a/angular.json +++ b/angular.json @@ -44,7 +44,12 @@ "options": { "buildTarget": "testing-library:test-build-zoneless", "setupFiles": ["projects/testing-library/test-setup.ts"], - "include": ["**/*.spec.ts", "../zoneless/**/*.spec.ts", "../schematics/**/*.spec.ts"] + "include": [ + "**/*.spec.ts", + "../zone/**/*.spec.ts", + "../zoneless/**/*.spec.ts", + "../schematics/**/*.spec.ts" + ] } }, "lint": { diff --git a/projects/testing-library/tsconfig.spec.json b/projects/testing-library/tsconfig.spec.json index ec2f2c0d..c472b3ad 100644 --- a/projects/testing-library/tsconfig.spec.json +++ b/projects/testing-library/tsconfig.spec.json @@ -3,7 +3,10 @@ "compilerOptions": { "types": ["node"], "target": "ES2022", - "useDefineForClassFields": false + "useDefineForClassFields": false, + "paths": { + "@testing-library/angular": ["./index.ts"] + } }, "include": ["**/*.ts"] } diff --git a/projects/testing-library/zone/index.ts b/projects/testing-library/zone/index.ts new file mode 100644 index 00000000..decc72d8 --- /dev/null +++ b/projects/testing-library/zone/index.ts @@ -0,0 +1 @@ +export * from './src/public_api'; diff --git a/projects/testing-library/zone/ng-package.json b/projects/testing-library/zone/ng-package.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/projects/testing-library/zone/ng-package.json @@ -0,0 +1 @@ +{} diff --git a/projects/testing-library/zone/src/public_api.ts b/projects/testing-library/zone/src/public_api.ts new file mode 100644 index 00000000..ef36be8a --- /dev/null +++ b/projects/testing-library/zone/src/public_api.ts @@ -0,0 +1,9 @@ +/* + * Public API Surface of @testing-library/angular/zone + * + * This entry point re-exports the zone-based API of `@testing-library/angular`. + * It exists so codebases can explicitly opt in to the zone-based `render`, + * ahead of `@testing-library/angular/zoneless` becoming the default. + */ + +export * from '@testing-library/angular'; diff --git a/projects/testing-library/zone/tests/zone.spec.ts b/projects/testing-library/zone/tests/zone.spec.ts new file mode 100644 index 00000000..ec4a8424 --- /dev/null +++ b/projects/testing-library/zone/tests/zone.spec.ts @@ -0,0 +1,30 @@ +import { Component } from '@angular/core'; +import { test, expect } from 'vitest'; +import * as root from '../../index'; +import * as zone from '../index'; +import { render, screen } from '../index'; + +test('re-exports the same public API as @testing-library/angular', () => { + const rootExports = root as Record; + const zoneExports = zone as Record; + + expect(Object.keys(zoneExports).sort()).toEqual(Object.keys(rootExports).sort()); + + for (const key of Object.keys(rootExports)) { + expect(zoneExports[key]).toBe(rootExports[key]); + } +}); + +@Component({ + selector: 'atl-fixture', + template: `Hello {{ name }}`, +}) +class FixtureComponent { + name = 'world'; +} + +test('renders a component', async () => { + await render(FixtureComponent); + + expect(screen.getByText('Hello world')).toBeInTheDocument(); +});