#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