-
Notifications
You must be signed in to change notification settings - Fork 308
Description
Version
13.1.1
Steps to reproduce
Setup an angular repository with jest.config.ts, not jest.config.js, jest-preset-angular, and a single test.
Expected behavior
The test runs
Actual behavior
TypeError: configSet.processWithEsbuild is not a function
Additional context
Upgrading to @angular-builders/jest 16.0.0-beta.0 I encountered an error TypeError: configSet.processWithEsbuild is not a function. (see just-jeb/angular-builders#1354)
I got my best debugger out and searched for the origin of this bug. I think that jest-preset-angular (probably versions 12+) is incompatible with Jest Typescript configuration files such as jest.config.ts and setupTest.ts.
The reason is the following.
- When
jest, thents-jesttransforms one of these two files (jest.config.tsandsetupTest.ts), it will instantiateTsJestTransformerand call_configsFor. Since no_cachedConfigSetsexists,TsJestTransformerwill create one. - Then
jestmoves to the Angular files. It properly transforms them withNgJestTransformer, which relies onsuper._configsForto call the configuration. However, it expects that no configuration will exist and that this function will be called instead to set the configset to aNgJestConfig(that contains the attributeprocessWithEsbuild):
_createConfigSet(config) {
return new ng_jest_config_1.NgJestConfig(config);
}- However,
NgJestConfigis never created as there is already one item in_cachedConfigSetsfor the same configuration. HenceprocessWithEsbuilddoes not exist in theconfigSetand the lineif (configSet.processWithEsbuild(filePath)) {will fail with the errorTypeError: configSet.processWithEsbuild is not a function
Reverting both jest.config.ts and setupTest.ts to plain Javascript files solves the issue (reverting only jest.config.ts does not) and the tests runs normally. This makes it probable that using the private cache is not a reliable method to add new parameters. Turns out, [this line already acknowledges](https://github.com/thymikee/jest-preset-angular/blob/2ad157d4a3e9130a8913561a57ec5931ef3e0ec4/src/ng-jest-transformer.ts#LL53C5-L53C102) that using the cache is dangerous and could lead to some problems. I suppose we should find another way to provide the processWithEsbuild option in the configuration but I’ll leave it to the maintainers as I don’t know the ecosystem well enough to weigh in.
Environment
System:
OS: macOS 13.0.1
CPU: (8) arm64 Apple M2
Binaries:
Node: 16.18.1 - ~/.nvm/versions/node/v16.18.1/bin/node
Yarn: 1.22.19 - ~/.nvm/versions/node/v16.18.1/bin/yarn
npm: 8.19.2 - ~/.nvm/versions/node/v16.18.1/bin/npm
npmPackages:
jest: ^29.3.1 => 29.5.0
- @angular/core version: 16.0.1
- @angular-devkit/build-angular version: 16.0.2
- @angular-builders/jest: version: 16.0.0-beta.0
- @angular-builders/custom-webpack: version: 16.0.0-beta.0
- ts-jest 29.1.0
- jest-preset-angular 13.1.1