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.

AWS CDK proporcionando definiciones incorrectas para pruebas Jest en propiedades de objetos

He creado un bote S3 utilizando el AWS CDK de la siguiente manera:

new s3.Bucket(this, 'MiPrimerBote', {
      versioned: true,
      encryption: s3.BucketEncryption.KMS,
      blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
    });

Pero no he tenido mucho éxito escribiendo pruebas Jest para ello. He intentado seguir https://docs.aws.amazon.com/cdk/v2/guide/testing.html#Capturing pero no he tenido mucha suerte. El s3.BlockPublicAccess.BLOCK_ALL devuelve
{"blockPublicAccess": {"blockPublicAcls": true, "blockPublicPolicy": true, "ignorePublicAcls": true, "restrictPublicBuckets": true}}

Pero cuando intento comparar esto en mis pruebas, el objeto está compuesto por
..."PublicAccessBlockConfiguration": {"BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true}...

He logrado pasar las pruebas, pero solo copiando el contenido del archivo JSON de CDK.out, sin embargo, siento que esto va en contra de cómo se deben escribir las pruebas. A continuación se muestra mi código de prueba. Cualquier ayuda sería muy apreciada.

  expect(template).toHaveProperty("AWS::S3::Bucket", {
        blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL
    })
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en el formato de la propiedad blockPublicAccess cuando se retorna desde el AWS SDK en comparación con lo que se espera en la prueba de Jest. Una posible solución sería transformar la propiedad retornada para que coincida con el formato esperado en la prueba.

    expect(template.resources).toContainEqual({
        type: 'AWS::S3::Bucket',
        properties: {
            PublicAccessBlockConfiguration: {
                BlockPublicAcls: true,
                BlockPublicPolicy: true,
                IgnorePublicAcls: true,
                RestrictPublicBuckets: true
            }
        }
    });
    

    En este ejemplo, el objeto PublicAccessBlockConfiguration se utiliza para que coincida con el formato esperado en la prueba de Jest. toContainEqual se utiliza para verificar si el array resources contiene un objeto con este type y estas properties específicas.

    En lugar de comparar directamente el objeto blockPublicAccess retornado con el valor esperado, puedes crear un objeto que coincida con el formato esperado y verificar su presencia en el array resources.

Comments are closed.