неудачный тест шутки с ошибкой «Стек конструктора класса не может быть вызван без «нового»»

#javascript #typescript #ecmascript-6 #jestjs #aws-cdk

Вопрос:

Я получил этот шутливый тест для конфигурации aws-cdk

 import { expect as expectCDK, matchTemplate, MatchStyle } from '@aws-cdk/assert'; import * as cdk from '@aws-cdk/core'; import { KmsMultiregionPrincipalKey } from '../lib/kms_multiregion_principalkey-stack';   test('Not Empty Stack', () =gt; {  const app = new cdk.App();  // WHEN  const stack = new KmsMultiregionPrincipalKey(app, 'MyTest_KmsMultiRegionKeyStack');  // THEN  // expectCDK(stack).to(matchTemplate({  // "Resources": {}  // }, MatchStyle.EXACT)) });  

Класс KmsMultiregionPrincipalKey объявлен как под

 export class KmsMultiregionPrincipalKey extends cdk.Stack {  public readonly principalKeyArn: string;   constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {  super(scope, id, props);  // REST OF THE CLASS CODE HERE } }}  

Для получения более подробной информации ниже приведены файлы tsconfig.json и jest.config.json:

tsconfig.json

 {  "compilerOptions": {  "target": "ES2018",  "module": "commonjs",  "lib": [  "es2018"  ],  "declaration": true,  "strict": true,  "noImplicitAny": true,  "strictNullChecks": true,  "noImplicitThis": true,  "alwaysStrict": true,  "noUnusedLocals": false,  "noUnusedParameters": false,  "noImplicitReturns": true,  "noFallthroughCasesInSwitch": false,  "inlineSourceMap": true,  "inlineSources": true,  "experimentalDecorators": true,  "strictPropertyInitialization": false,  "typeRoots": [  "./node_modules/@types"  ]  },  "exclude": [  "node_modules",  "cdk.out"  ] }  

jest.config.json

 module.exports = {  testEnvironment: 'node',  roots: ['lt;rootDirgt;/test'],  testMatch: ['**/*.test.ts'],  transform: {  '^. \.tsx?

Когда я запускаю тест, я получаю следующую ошибку

`Стек конструктора класса не может быть вызван без"нового`"

Вопрос: Что не так с моими конфигурациями теста или шутки/машинописи?

Чтобы дать вам больше контекста, этот тест, в котором все, кроме определения приложения, прокомментировано, пройдите:

ПРОХОЖДЕНИЕ ТЕСТА

 import { expect as expectCDK, matchTemplate, MatchStyle } from '@aws-cdk/assert'; import * as cdk from '@aws-cdk/core'; import { KmsMultiregionPrincipalKey } from '../lib/kms_multiregion_principalkey-stack';   test('Not Empty Stack', () =gt; {  const app = new cdk.App();  // WHEN  //const stack = new KmsMultiregionPrincipalKey(app, 'MyTest_KmsMultiRegionKeyStack');  // THEN  // expectCDK(stack).to(matchTemplate({  // "Resources": {}  // }, MatchStyle.EXACT)) });  

Комментарии:

1. Если закомментированная строка expectCDK(stack).to откомментирована, это потенциально может привести к этой ошибке, потому что, когда вы передадите функцию в Jest, она попытается ее вызвать.

2. Если приведенный ниже код const stack ... не прокомментирован, он все равно завершается одинаково. Если я прокомментирую весь код , начиная с const stack ... , тест пройдет. Таким образом, проблема заключается в const stack ... определении

3. Можете ли вы проверить, как выглядит фактически выполненный (транспилированный) код? Убедитесь, что он действительно использует class синтаксис с. super

Ответ №1:

Что сработало для меня, так это просто обновление узла.

 node --version 14.x... nvm install --lst node --version 16.13.0  

Это простое обновление заставляет его работать

Нужен ли "модулю": "commonjs" узел gt; 14 ?

Комментарии:

1. Нет, "module": "commonjs" не нужен узел gt; 14

: 'ts-jest' } }; Когда я запускаю тест, я получаю следующую ошибку

`Стек конструктора класса не может быть вызван без»нового`»

Вопрос: Что не так с моими конфигурациями теста или шутки/машинописи?

Чтобы дать вам больше контекста, этот тест, в котором все, кроме определения приложения, прокомментировано, пройдите:

ПРОХОЖДЕНИЕ ТЕСТА


Комментарии:

1. Если закомментированная строка expectCDK(stack).to откомментирована, это потенциально может привести к этой ошибке, потому что, когда вы передадите функцию в Jest, она попытается ее вызвать.

2. Если приведенный ниже код const stack ... не прокомментирован, он все равно завершается одинаково. Если я прокомментирую весь код , начиная с const stack ... , тест пройдет. Таким образом, проблема заключается в const stack ... определении

3. Можете ли вы проверить, как выглядит фактически выполненный (транспилированный) код? Убедитесь, что он действительно использует class синтаксис с. super

Ответ №1:

Что сработало для меня, так это просто обновление узла.


Это простое обновление заставляет его работать

Нужен ли «модулю»: «commonjs» узел gt; 14 ?

Комментарии:

1. Нет, "module": "commonjs" не нужен узел gt; 14