Jest ejecute la función asíncrona UNA VEZ antes de todas las pruebas

3 minutos de lectura

Avatar de usuario de Roy
Roy

Quiero usar broma para la prueba de mi unidad de servidor (en lugar de mocha+chai). ¿Hay alguna manera de que pueda ejecutar la función asíncrona antes de que comiencen todas las pruebas (propósitos de inicialización) solo una vez y no para cada archivo de prueba? ¿Y también si hay una forma de ejecutar algo después de realizar todas las pruebas?

Avatar de usuario de Amaury Liet
amaury liet

Esta función se agregó en Versión 22 de Jestcon globalSetup y globalTeardown configuraciones Mirar esto por ejemplo.

paquete.json (o en jest.config.js)

{
  ...
  "jest": {
    "globalSetup": "./scripts/jestGlobalSetup.js"
  }
}

/scripts/jestGlobalSetup.js

module.exports = async () => {
  console.log('\nhello, this is just before tests start running');
};

O

export default async () => {
  console.log('\nhello, this is just before tests start running');
};

  • Desafortunadamente, no puede hacer nada relacionado con Jest en ese archivo (excepto acceder a las opciones), como configurar simulacros globales, porque el global jest El objeto no está disponible y no puede importarlo fuera de un archivo de prueba.

    – Mike Lischke

    hace 2 días


Avatar de usuario de Michael Jungo
Miguel Jungo

La broma proporciona beforeAll y afterAll. Al igual que con test/it esperará a que se resuelva una promesa, si la función devuelve una promesa.

beforeAll(() => {
  return new Promise(resolve => {
    // Asynchronous task
    // ...
    resolve();
  });
});

También es compatible con el estilo de devolución de llamada, si tiene algún código de prueba existente que use devoluciones de llamada, aunque se recomienda usar promesas.

beforeAll(done => {
  // Asynchronous task
  // ...
  done();
});

  • Broma beforeAll suena muy bien, especialmente re: Promises “Si la función devuelve una promesa o es un generador, Jest espera a que se resuelva esa promesa antes de ejecutar las pruebas”. ¿Jasmine tiene el equivalente? Parece que Jasmine lo hace. no apoyar Promesas, pero lo hace apoyar un done enfoque de devolución de llamada? Específicamente estoy usando Protractor, pero el done la devolución de llamada no funciona para mí como se describe aquí,

    – El guisante rojo

    31 de diciembre de 2017 a las 3:14

  • ¿Dónde puedo encontrar los documentos que indican que puede usar? done() en beforeAll? Solo puedo encontrarlo espera promesa

    – otong

    11 de febrero de 2019 a las 3:43


  • Buena respuesta, pero no satisface el pedido “solo una vez y no para cada archivo de prueba”.

    – Konstantin Pelepelín

    18 de marzo de 2019 a las 15:58

  • Esta respuesta es incorrecta, esto sucede una vez por archivo de prueba

    – Pato Loco

    4 de junio de 2021 a las 13:08

Avatar de usuario de Raheel Riaz
Raheel Riaz

jest proporciona opciones tanto para la configuración global como para el desmontaje en las nuevas versiones. Puede crear archivos tanto para la configuración como para el desmontaje exportando una función asíncrona y proporcionar esa ruta en una configuración de broma como esta.

"globalSetup": "setup-file-path",
"globalTeardown": "tear-down-file-path"

Puedes leer más sobre esto aquí

  • Votado negativo debido a que no incluye un enlace a una fuente de referencia.

    – andersr

    19 de agosto de 2020 a las 22:28

Si ejecuta pruebas de broma con npm, puede ejecutar cualquier comando de nodo o cualquier ejecutable antes de ejecutar otro comando

"scripts": {
    "test": "node setup.js && jest"
  }

así que ahora puedes ejecutar esto con el comando

$ npm t

Avatar de usuario de Raj Gohil
Raj Gohil

Se vuelve muy fácil cuando usas antes de todo función fuera del bloque de descripción y luego asignarle una palabra clave asíncrona.

Nota: estoy usando broma @27.4.3 versión aquí

ejemplo de código

import { getValuesFromAWSSecretManager } from '../../src/libs/secret_manager';
import quickbooksConfigFrom from '../../src/config/quickbooks';

const quickbooksConfig = quickbooksConfigFrom;

// calling the async beforeALL function to get values from AWS Secret Manager
beforeAll(async () => {
  const secretData = await getValuesFromAWSSecretManager();
  quickbooksConfig.clientId = secretData.QUICKBOOKS_CLIENT_ID;
  quickbooksConfig.clientSecret = secretData.QUICKBOOKS_CLIENT_SECRET;
});

describe('Quickbooks config file should be defined', () => {
  test('Quickbooks File should be exist', () => {
    expect(quickbooksConfig).toBeDefined();
  });

  test('Quickbooks File should be exist and having values', () => {
    expect(quickbooksConfig).toBeTruthy();
  });
});

espero que te sirva y resuelva tus dudas,

y es posible que deba hacerlo en cada archivo para aplicar.

puedes consultar broma antesToda la documentación de aquí

¿Ha sido útil esta solución?