Jest 迁移时令牌无效或意外
Invalid or unexpected token while Jest migration
我正在将我的项目从 Karma-Jasmine 迁移到 Jest。
但我收到以下错误。看来我缺少一些配置。
错误指向 app.component.ts 文件中导入的服务的 constructor(@Inject('env') env: IEnvironment,
行。
错误如下
FAIL aapA apps/aapA/src/app/app.component.spec.ts
● Test suite failed to run
D:\Development\NRWLProject\libs\shared\src\services\apiUrlProviderService.ts:19
constructor(@(0, _core.Inject)('env')
^
SyntaxError: Invalid or unexpected token
7 |
8 | import * as CommonStateConstants from '../../models/common-state.model';
> 9 | import { navigationPath } from '../../services/apiUrlProviderService';
| ^
10 |
11 | import { UserDataService } from '../../services/user-data.service';
12 |
at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1258:14)
at Object.<anonymous> (libs/shared/src/containers/home/shell.component.ts:9:1)
====ApiUrlProviderService====
@Injectable()
export class ApiUrlProviderService {
private appSetting: AppSetting;
constructor(
@Inject('env') env: IEnvironment,
private apiConfigurationProvider: ApiConfigurationProvider
) {
this.appSetting = new AppSetting(env.common.baseUrl);
}
====JEST.CONFIG====
module.exports = {
preset: 'jest-preset-angular',
testEnvironment: 'jsdom',
transform: {
'^.+\.(ts|html)$': 'ts-jest',
'^.+\.js$': 'babel-jest'
},
transformIgnorePatterns: ['<rootDir>/node_modules/(?!lodash-es/.*)'],
collectCoverage: false,
clearMocks: true,
setupFilesAfterEnv: ['./test-setup.ts'],
projects: [
{
displayName: 'appA',
testMatch: [
'<rootDir>/apps/aapA/src/app/**/*.spec.ts',
'<rootDir>/libs/appA/**/src/lib/**/?(*.)(spec|test).{ts}'
]
},
{
displayName: 'appB',
testMatch: [
'<rootDir>/apps/appB/src/app/**/*.spec.ts',
'<rootDir>/libs/appB/**/src/lib/**/?(*.)(spec|test).{ts}'
]
}
]
};
====BABEL.CONFIG====
module.exports = function(api) {
api.cache(true);
const presets = [
['@babel/preset-env', { targets: { node: 'current' } }],
'@babel/preset-typescript'
];
const plugins = [
['@babel/plugin-proposal-decorators', { legacy: true }],
[
'module-resolver',
{
root: ['.'],
alias: {
'@my-nrwl-project/shared': './libs/shared/src/index.ts'
}
}
],
['dynamic-import-node'],
[
'@babel/plugin-proposal-class-properties',
{
loose: true
}
]
];
const ignore = ['./node_modules'];
return {
presets,
plugins,
ignore
};
};
===Package.json===
{
"scripts": {
...
"test": "jest --config=jest.config.js --passWithNoTests --verbose",
...
},
"dependencies": {
"@angular-builders/custom-webpack": "8.4.1",
"@angular/animations": "8.2.14",
"@angular/cdk": "8.2.3",
"@angular/common": "8.2.14",
"@angular/compiler": "8.2.14",
"@angular/core": "8.2.14",
"@angular/flex-layout": "8.0.0-beta.27",
"@angular/forms": "8.2.14",
"@angular/material": "8.2.3",
"@angular/platform-browser": "8.2.14",
"@angular/platform-browser-dynamic": "8.2.14",
"@angular/router": "8.2.14",
"@ngrx/effects": "8.5.2",
"@ngrx/entity": "8.5.2",
"@ngrx/router-store": "8.5.2",
"@ngrx/store": "8.5.2",
"@nrwl/angular": "8.10.0",
"@nrwl/nx": "7.8.7",
"core-js": "3.6.1",
"istanbul-lib-report": "3.0.0",
"jquery": "3.4.1",
"nyc": "13.3.0",
"rxjs": "6.5.4",
"tslib": "1.10.0",
"zone.js": "0.9.1"
},
"devDependencies": {
"@angular-builders/jest": "^9.0.1",
"@angular-devkit/build-angular": "0.803.23",
"@angular-devkit/build-ng-packagr": "0.803.23",
"@angular-devkit/schematics": "8.2.0",
"@angular/cli": "8.3.20",
"@angular/compiler-cli": "8.2.14",
"@angular/language-service": "8.2.14",
"@babel/plugin-proposal-class-properties": "^7.8.3",
"@babel/plugin-proposal-decorators": "^7.8.3",
"@babel/preset-env": "^7.9.6",
"@babel/preset-typescript": "^7.9.0",
"@ngrx/store-devtools": "8.5.2",
"@nrwl/jest": "8.8.2",
"@nrwl/schematics": "8.10.0",
"@nrwl/workspace": "8.10.0",
"@types/jest": "^24.0.18",
"@types/lodash": "4.14.123",
"@types/lodash-es": "4.17.3",
"@types/node": "12.12.17",
"angular-testing-library": "0.0.2",
"babel-jest": "^26.0.1",
"babel-plugin-module-resolver": "^4.0.0",
"chalk": "3.0.0",
"codelyzer": "5.2.0",
"cross-env": "6.0.3",
"glob": "^7.1.6",
"gulp": "4.0.2",
"gulp-inline-source": "4.0.0",
"gulp-typescript": "6.0.0-alpha.1",
"jest": "^25.4.0",
"jest-cli": "^25.4.0",
"jest-createspyobj": "^1.2.2",
"jest-preset-angular": "7.1.1",
"jest-webpack-resolver": "^0.3.0",
"jest-zone-patch": "0.0.10",
"json-server": "0.15.1",
"karma-junit-reporter": "2.0.1",
"mini-css-extract-plugin": "0.8.0",
"node-sass": "4.13.1",
"optimize-css-assets-webpack-plugin": "5.0.3",
"rxjs-tslint": "0.1.7",
"ts-jest": "^25.4.0",
"ts-node": "8.5.4",
"tsconfig-paths-webpack-plugin": "^3.2.0",
"tslint": "5.20.1",
"typescript": "^3.5.3",
},
}
如果您需要更多信息,请告诉我。
提前致谢。
在 babel.config 中添加这些插件解决了我的问题
'transform-class-properties',
'babel-plugin-parameter-decorator'
我正在将我的项目从 Karma-Jasmine 迁移到 Jest。 但我收到以下错误。看来我缺少一些配置。
错误指向 app.component.ts 文件中导入的服务的 constructor(@Inject('env') env: IEnvironment,
行。
错误如下
FAIL aapA apps/aapA/src/app/app.component.spec.ts
● Test suite failed to run
D:\Development\NRWLProject\libs\shared\src\services\apiUrlProviderService.ts:19
constructor(@(0, _core.Inject)('env')
^
SyntaxError: Invalid or unexpected token
7 |
8 | import * as CommonStateConstants from '../../models/common-state.model';
> 9 | import { navigationPath } from '../../services/apiUrlProviderService';
| ^
10 |
11 | import { UserDataService } from '../../services/user-data.service';
12 |
at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1258:14)
at Object.<anonymous> (libs/shared/src/containers/home/shell.component.ts:9:1)
====ApiUrlProviderService====
@Injectable()
export class ApiUrlProviderService {
private appSetting: AppSetting;
constructor(
@Inject('env') env: IEnvironment,
private apiConfigurationProvider: ApiConfigurationProvider
) {
this.appSetting = new AppSetting(env.common.baseUrl);
}
====JEST.CONFIG====
module.exports = {
preset: 'jest-preset-angular',
testEnvironment: 'jsdom',
transform: {
'^.+\.(ts|html)$': 'ts-jest',
'^.+\.js$': 'babel-jest'
},
transformIgnorePatterns: ['<rootDir>/node_modules/(?!lodash-es/.*)'],
collectCoverage: false,
clearMocks: true,
setupFilesAfterEnv: ['./test-setup.ts'],
projects: [
{
displayName: 'appA',
testMatch: [
'<rootDir>/apps/aapA/src/app/**/*.spec.ts',
'<rootDir>/libs/appA/**/src/lib/**/?(*.)(spec|test).{ts}'
]
},
{
displayName: 'appB',
testMatch: [
'<rootDir>/apps/appB/src/app/**/*.spec.ts',
'<rootDir>/libs/appB/**/src/lib/**/?(*.)(spec|test).{ts}'
]
}
]
};
====BABEL.CONFIG====
module.exports = function(api) {
api.cache(true);
const presets = [
['@babel/preset-env', { targets: { node: 'current' } }],
'@babel/preset-typescript'
];
const plugins = [
['@babel/plugin-proposal-decorators', { legacy: true }],
[
'module-resolver',
{
root: ['.'],
alias: {
'@my-nrwl-project/shared': './libs/shared/src/index.ts'
}
}
],
['dynamic-import-node'],
[
'@babel/plugin-proposal-class-properties',
{
loose: true
}
]
];
const ignore = ['./node_modules'];
return {
presets,
plugins,
ignore
};
};
===Package.json===
{
"scripts": {
...
"test": "jest --config=jest.config.js --passWithNoTests --verbose",
...
},
"dependencies": {
"@angular-builders/custom-webpack": "8.4.1",
"@angular/animations": "8.2.14",
"@angular/cdk": "8.2.3",
"@angular/common": "8.2.14",
"@angular/compiler": "8.2.14",
"@angular/core": "8.2.14",
"@angular/flex-layout": "8.0.0-beta.27",
"@angular/forms": "8.2.14",
"@angular/material": "8.2.3",
"@angular/platform-browser": "8.2.14",
"@angular/platform-browser-dynamic": "8.2.14",
"@angular/router": "8.2.14",
"@ngrx/effects": "8.5.2",
"@ngrx/entity": "8.5.2",
"@ngrx/router-store": "8.5.2",
"@ngrx/store": "8.5.2",
"@nrwl/angular": "8.10.0",
"@nrwl/nx": "7.8.7",
"core-js": "3.6.1",
"istanbul-lib-report": "3.0.0",
"jquery": "3.4.1",
"nyc": "13.3.0",
"rxjs": "6.5.4",
"tslib": "1.10.0",
"zone.js": "0.9.1"
},
"devDependencies": {
"@angular-builders/jest": "^9.0.1",
"@angular-devkit/build-angular": "0.803.23",
"@angular-devkit/build-ng-packagr": "0.803.23",
"@angular-devkit/schematics": "8.2.0",
"@angular/cli": "8.3.20",
"@angular/compiler-cli": "8.2.14",
"@angular/language-service": "8.2.14",
"@babel/plugin-proposal-class-properties": "^7.8.3",
"@babel/plugin-proposal-decorators": "^7.8.3",
"@babel/preset-env": "^7.9.6",
"@babel/preset-typescript": "^7.9.0",
"@ngrx/store-devtools": "8.5.2",
"@nrwl/jest": "8.8.2",
"@nrwl/schematics": "8.10.0",
"@nrwl/workspace": "8.10.0",
"@types/jest": "^24.0.18",
"@types/lodash": "4.14.123",
"@types/lodash-es": "4.17.3",
"@types/node": "12.12.17",
"angular-testing-library": "0.0.2",
"babel-jest": "^26.0.1",
"babel-plugin-module-resolver": "^4.0.0",
"chalk": "3.0.0",
"codelyzer": "5.2.0",
"cross-env": "6.0.3",
"glob": "^7.1.6",
"gulp": "4.0.2",
"gulp-inline-source": "4.0.0",
"gulp-typescript": "6.0.0-alpha.1",
"jest": "^25.4.0",
"jest-cli": "^25.4.0",
"jest-createspyobj": "^1.2.2",
"jest-preset-angular": "7.1.1",
"jest-webpack-resolver": "^0.3.0",
"jest-zone-patch": "0.0.10",
"json-server": "0.15.1",
"karma-junit-reporter": "2.0.1",
"mini-css-extract-plugin": "0.8.0",
"node-sass": "4.13.1",
"optimize-css-assets-webpack-plugin": "5.0.3",
"rxjs-tslint": "0.1.7",
"ts-jest": "^25.4.0",
"ts-node": "8.5.4",
"tsconfig-paths-webpack-plugin": "^3.2.0",
"tslint": "5.20.1",
"typescript": "^3.5.3",
},
}
如果您需要更多信息,请告诉我。
提前致谢。
在 babel.config 中添加这些插件解决了我的问题
'transform-class-properties',
'babel-plugin-parameter-decorator'