@analogjs/vitest-angular 2.1.0-beta.4 → 2.1.0-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -76,52 +76,37 @@ export default defineConfig(({ mode }) => ({
76
76
  include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
77
77
  reporters: ['default'],
78
78
  },
79
- define: {
80
- 'import.meta.vitest': mode !== 'production',
81
- },
82
79
  }));
83
80
  ```
84
81
 
85
82
  Next, define a `src/test-setup.ts` file to setup the `TestBed`:
86
83
 
84
+ ### Zoneless setup
85
+
86
+ As of Angular v21, `Zoneless` change detection is the default for new projects.
87
+
88
+ Use the following setup:
89
+
87
90
  ```ts
88
91
  import '@angular/compiler';
89
- import '@analogjs/vitest-angular/setup-zone';
90
-
91
- import {
92
- BrowserTestingModule,
93
- platformBrowserTesting,
94
- } from '@angular/platform-browser/testing';
95
- import { getTestBed } from '@angular/core/testing';
92
+ import '@analogjs/vitest-angular/setup-snapshots';
93
+ import { setupTestBed } from '@analogjs/vitest-angular/setup-testbed';
96
94
 
97
- getTestBed().initTestEnvironment(
98
- BrowserTestingModule,
99
- platformBrowserTesting(),
100
- );
95
+ setupTestBed();
101
96
  ```
102
97
 
103
- If you are using `Zoneless` change detection, use the following setup:
98
+ ### Zone.js setup
99
+
100
+ If you are using `Zone.js` for change detection, import the `setup-zone` script. This script automatically includes support for setting up snapshot tests.
104
101
 
105
102
  ```ts
106
103
  import '@angular/compiler';
107
- import '@analogjs/vitest-angular/setup-snapshots';
104
+ import '@analogjs/vitest-angular/setup-zone';
105
+ import { setupTestBed } from '@analogjs/vitest-angular/setup-testbed';
108
106
 
109
- import { provideZonelessChangeDetection, NgModule } from '@angular/core';
110
- import {
111
- BrowserTestingModule,
112
- platformBrowserTesting,
113
- } from '@angular/platform-browser/testing';
114
- import { getTestBed } from '@angular/core/testing';
115
-
116
- @NgModule({
117
- providers: [provideZonelessChangeDetection()],
118
- })
119
- export class ZonelessTestModule {}
120
-
121
- getTestBed().initTestEnvironment(
122
- [BrowserTestingModule, ZonelessTestModule],
123
- platformBrowserTesting(),
124
- );
107
+ setupTestBed({
108
+ zoneless: false,
109
+ });
125
110
  ```
126
111
 
127
112
  Next, update the `test` target in the `angular.json` to use the `@analogjs/vitest-angular:test` builder:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@analogjs/vitest-angular",
3
- "version": "2.1.0-beta.4",
3
+ "version": "2.1.0-beta.6",
4
4
  "description": "Vitest Builder for Angular",
5
5
  "type": "module",
6
6
  "author": "Brandon Roberts <robertsbt@gmail.com>",
@@ -8,7 +8,8 @@
8
8
  ".": "./src/index.js",
9
9
  "./package.json": "./package.json",
10
10
  "./setup-zone": "./setup-zone.js",
11
- "./setup-snapshots": "./setup-snapshots.js"
11
+ "./setup-snapshots": "./setup-snapshots.js",
12
+ "./setup-testbed": "./setup-testbed.js"
12
13
  },
13
14
  "keywords": [
14
15
  "angular",
@@ -35,7 +36,7 @@
35
36
  },
36
37
  "peerDependencies": {
37
38
  "@analogjs/vite-plugin-angular": "*",
38
- "@angular-devkit/architect": ">=0.1500.0 < 0.2100.0",
39
+ "@angular-devkit/architect": ">=0.1500.0 < 0.2200.0",
39
40
  "vitest": "^1.3.1 || ^2.0.0 || ^3.0.0 || ^4.0.0"
40
41
  },
41
42
  "ng-update": {
@@ -0,0 +1,7 @@
1
+ import { Type } from '@angular/core';
2
+ type TestBedSetupOptions = {
3
+ zoneless?: boolean;
4
+ providers?: Type<any>[];
5
+ };
6
+ export declare function setupTestBed(options?: TestBedSetupOptions): void;
7
+ export {};
@@ -0,0 +1,26 @@
1
+ import { __decorate } from "tslib";
2
+ import { NgModule, provideZonelessChangeDetection } from '@angular/core';
3
+ import { getTestBed, ɵgetCleanupHook as getCleanupHook, } from '@angular/core/testing';
4
+ import { BrowserTestingModule, platformBrowserTesting, } from '@angular/platform-browser/testing';
5
+ import { afterEach, beforeEach } from 'vitest';
6
+ beforeEach(getCleanupHook(false));
7
+ afterEach(getCleanupHook(true));
8
+ const ANGULAR_TESTBED_SETUP = Symbol.for('testbed-setup');
9
+ export function setupTestBed(options = { zoneless: true, providers: [] }) {
10
+ if (!globalThis[ANGULAR_TESTBED_SETUP]) {
11
+ globalThis[ANGULAR_TESTBED_SETUP] = true;
12
+ let ZonelessTestModule = class ZonelessTestModule {
13
+ };
14
+ ZonelessTestModule = __decorate([
15
+ NgModule({
16
+ providers: options?.zoneless ? [provideZonelessChangeDetection()] : [],
17
+ })
18
+ ], ZonelessTestModule);
19
+ getTestBed().initTestEnvironment([
20
+ BrowserTestingModule,
21
+ ...(options?.zoneless ? [ZonelessTestModule] : []),
22
+ ...(options?.providers || []),
23
+ ], platformBrowserTesting());
24
+ }
25
+ }
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAtdGVzdGJlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3ZpdGVzdC1hbmd1bGFyL3NldHVwLXRlc3RiZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsOEJBQThCLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUNMLFVBQVUsRUFDVixlQUFlLElBQUksY0FBYyxHQUNsQyxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsc0JBQXNCLEdBQ3ZCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFL0MsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUVoQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7QUFPMUQsTUFBTSxVQUFVLFlBQVksQ0FDMUIsVUFBK0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFFaEUsSUFBSSxDQUFFLFVBQWtCLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDO1FBQy9DLFVBQWtCLENBQUMscUJBQXFCLENBQUMsR0FBRyxJQUFJLENBQUM7UUFLbEQsSUFBTSxrQkFBa0IsR0FBeEIsTUFBTSxrQkFBa0I7U0FBRyxDQUFBO1FBQXJCLGtCQUFrQjtZQUh2QixRQUFRLENBQUM7Z0JBQ1IsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsOEJBQThCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2FBQ3ZFLENBQUM7V0FDSSxrQkFBa0IsQ0FBRztRQUUzQixVQUFVLEVBQUUsQ0FBQyxtQkFBbUIsQ0FDOUI7WUFDRSxvQkFBb0I7WUFDcEIsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xELEdBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBaUI7U0FDL0MsRUFDRCxzQkFBc0IsRUFBRSxDQUN6QixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgcHJvdmlkZVpvbmVsZXNzQ2hhbmdlRGV0ZWN0aW9uLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBnZXRUZXN0QmVkLFxuICDJtWdldENsZWFudXBIb29rIGFzIGdldENsZWFudXBIb29rLFxufSBmcm9tICdAYW5ndWxhci9jb3JlL3Rlc3RpbmcnO1xuaW1wb3J0IHtcbiAgQnJvd3NlclRlc3RpbmdNb2R1bGUsXG4gIHBsYXRmb3JtQnJvd3NlclRlc3RpbmcsXG59IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXIvdGVzdGluZyc7XG5pbXBvcnQgeyBhZnRlckVhY2gsIGJlZm9yZUVhY2ggfSBmcm9tICd2aXRlc3QnO1xuXG5iZWZvcmVFYWNoKGdldENsZWFudXBIb29rKGZhbHNlKSk7XG5hZnRlckVhY2goZ2V0Q2xlYW51cEhvb2sodHJ1ZSkpO1xuXG5jb25zdCBBTkdVTEFSX1RFU1RCRURfU0VUVVAgPSBTeW1ib2wuZm9yKCd0ZXN0YmVkLXNldHVwJyk7XG5cbnR5cGUgVGVzdEJlZFNldHVwT3B0aW9ucyA9IHtcbiAgem9uZWxlc3M/OiBib29sZWFuO1xuICBwcm92aWRlcnM/OiBUeXBlPGFueT5bXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cFRlc3RCZWQoXG4gIG9wdGlvbnM6IFRlc3RCZWRTZXR1cE9wdGlvbnMgPSB7IHpvbmVsZXNzOiB0cnVlLCBwcm92aWRlcnM6IFtdIH0sXG4pIHtcbiAgaWYgKCEoZ2xvYmFsVGhpcyBhcyBhbnkpW0FOR1VMQVJfVEVTVEJFRF9TRVRVUF0pIHtcbiAgICAoZ2xvYmFsVGhpcyBhcyBhbnkpW0FOR1VMQVJfVEVTVEJFRF9TRVRVUF0gPSB0cnVlO1xuXG4gICAgQE5nTW9kdWxlKHtcbiAgICAgIHByb3ZpZGVyczogb3B0aW9ucz8uem9uZWxlc3MgPyBbcHJvdmlkZVpvbmVsZXNzQ2hhbmdlRGV0ZWN0aW9uKCldIDogW10sXG4gICAgfSlcbiAgICBjbGFzcyBab25lbGVzc1Rlc3RNb2R1bGUge31cblxuICAgIGdldFRlc3RCZWQoKS5pbml0VGVzdEVudmlyb25tZW50KFxuICAgICAgW1xuICAgICAgICBCcm93c2VyVGVzdGluZ01vZHVsZSxcbiAgICAgICAgLi4uKG9wdGlvbnM/LnpvbmVsZXNzID8gW1pvbmVsZXNzVGVzdE1vZHVsZV0gOiBbXSksXG4gICAgICAgIC4uLigob3B0aW9ucz8ucHJvdmlkZXJzIHx8IFtdKSBhcyBUeXBlPGFueT5bXSksXG4gICAgICBdLFxuICAgICAgcGxhdGZvcm1Ccm93c2VyVGVzdGluZygpLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==