-
Notifications
You must be signed in to change notification settings - Fork 309
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Angular: Jest without Zone (noNgZone). #354
Comments
Hey! No, we just got into the first compatibility issues with Angular 9, so there's no work done on this field so far. |
Removing the zone imports will raise an Some interesting findings:
|
I remember I tried this before, with Angular 8 or lower I also got some similar errors so I gave up about excluding zone. Angular looks like tightly coupled with zone |
@x47188 but if I interpret the issue right, you do have an app that runs without zone.js and you want to achieve the same in jsdom for jest, is that the case? |
Absolutely.
Very appreciated! However I fear the current |
Do your zoneless tests run in Karma? |
@wtho good question, I'll create a "repro" to verify that. (I've striped karma & co from my current code-base) |
Thanks, if you could also share it, that would be awesome! |
I think this depends on the development from Angular to work without zone, which is currently in roadmap https://angular.io/guide/roadmap#leverage-full-framework-capabilities-with-zonejs-opt-out |
@ahnpnl Hi, since angular 18 features experimental zoneless support, is that planned for the near future? Right now in the application without zone, importing preset with
|
Hi, yes I think if we can rely on a flag from angular package to detect when zone is available to import, it should be easy to implement into the existing setup file. If there is no such flag, i think we might need a separate setup file for testing zoneless application. PR is welcome :) |
This currently is a blocker for us to start using Zoneless apps in Angular 18. Would love to see a fix 🙇 |
You can simply copy the content of |
Ok it was a bit of an ordeal that I had to go through. Cause I was using Even though I understood from the docs that In the end I completely ripped out Now my jest config looks like this and works with // package.json
{
"jest": {
"preset": "jest-preset-angular",
"setupFilesAfterEnv": [
"<rootDir>/jest.setup.ts"
]
}
} // jest.setup.ts
import { getTestBed } from "@angular/core/testing"
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting,
} from "@angular/platform-browser-dynamic/testing"
const testEnvironmentOptions =
(globalThis as any).ngJest?.testEnvironmentOptions ?? Object.create(null)
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting(),
testEnvironmentOptions,
) Thanks. @ahnpnl for the hint of just copying the setup code. |
Besides, I asked Angular team and they also suggested to include this https://github.com/angular/components/blob/04d3b63de2fb843beb55836e39e930c3342d26f1/test/angular-test-init-spec.ts#L35 I think in the next major release, we can provide function to call instead of implicitly calling setup TestBed upon import like current way. Providing function call to setup Jest will be more flexible instead of relying on |
Hey 🙌
I was wondering if there was any documented way to run Angular 9 + Jest without zone.js ( setupJest.ts heavily relies on Zone)?
The text was updated successfully, but these errors were encountered: