es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La prueba Jest ha fallado con el error “El constructor de la clase Stack no puede ser invocado sin ‘new'”.

Obtuve esta prueba de jest para una configuración aws-cdk:

import { expect as expectCDK, matchTemplate, MatchStyle } from '@aws-cdk/assert';
import * as cdk from '@aws-cdk/core';
import { KmsMultiregionPrincipalKey } from '../lib/kms<em>multiregion</em>principalkey-stack';

test('Not Empty Stack', () => {
   const app = new cdk.App();
   // WHEN
   const stack = new KmsMultiregionPrincipalKey(app, 'MyTest_KmsMultiRegionKeyStack');
   // THEN
   // expectCDK(stack).to(matchTemplate({
   //   "Resources": {}
   // }, MatchStyle.EXACT))
});

La clase KmsMultiregionPrincipalKey se declara de la siguiente manera:

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
 }
}

Para obtener más detalles, a continuación se muestran los archivos tsconfig.json y 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: ['<rootdir>/test'],
 testMatch: ['**/*.test.ts'],
 transform: {
   '^.+\\.tsx?$': 'ts-jest'
 }
};

Cuando ejecuto la prueba, obtengo el siguiente error:

Class constructor Stack cannot be invoked without 'new'

Pregunta: ¿Qué está mal con mi prueba o las configuraciones jest/typescript?

Para darle más contexto, esta prueba pasa cuando todo, excepto la definición de la aplicación, está comentado:
“`
import { expect as expectCDK, matchTemplate, MatchStyle } from '@aws-cdk/assert';
import * as cdk from '@aws-cdk/core';
import { KmsMultiregionPrincipalKey } from '../lib/kms<em>multiregion</em>principalkey-stack';

test('Not Empty Stack', () => {
const app = new cdk.App();
// WHEN
//const stack = new KmsMultiregionPrincipalKey(app, 'MyTest_KmsMultiRegionKeyStack');
// THEN
// expectCDK(stack).to(matchTemplate({
// "Resources": {}
// }, MatchStyle.EXACT))
});
“`

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema con la prueba es que no está usando la palabra clave new para crear una instancia de la clase KmsMultiregionPrincipalKey. La clase KmsMultiregionPrincipalKey extiende cdk.Stack, que es un constructor de clase que requiere la palabra clave new para crear una instancia.

    Para solucionar el error, cambia la línea que crea una nueva instancia de KmsMultiregionPrincipalKey para usar la palabra clave new:

    const stack = new KmsMultiregionPrincipalKey(app, 'MyTest_KmsMultiRegionKeyStack');

    Además, asegúrate de haber importado el módulo cdk en el archivo de prueba:

    import * as cdk from '@aws-cdk/core';

    Además, asegúrate de que el paquete cdk esté instalado en tu proyecto:

    npm install @aws-cdk/core

    Aparte de esto, la configuración de Jest/Typescript se ve bien.

Comments are closed.