Führen Sie die async-Funktion einmal vor allen Tests aus

Lesezeit: 3 Minuten

Benutzeravatar von Roy
Roy

Ich möchte Jest für meine Serverkomponententests verwenden (anstelle von Mocha + Chai). Gibt es eine Möglichkeit, die asynchrone Funktion vor dem Start aller Tests (Init-Zwecke) nur einmal und nicht für jede Testdatei auszuführen? Und auch, ob es eine Möglichkeit gibt, etwas auszuführen, nachdem alle Tests abgeschlossen sind?

Benutzeravatar von Amaury Liet
Amaury Liet

Diese Funktion wurde hinzugefügt Jests 22-Versionmit globalSetup und globalTeardown Konfigurationen. Ansehen Dieser zum Beispiel.

package.json (oder in jest.config.js)

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

/scripts/jestGlobalSetup.js

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

ODER

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

  • Leider können Sie in dieser Datei nichts tun, was mit Jest zu tun hat (außer auf die Optionen zugreifen), wie z. B. das Einrichten globaler Mocks, da die Datei global jest Objekt ist nicht verfügbar und Sie können es nicht außerhalb einer Testdatei importieren.

    – Mike Lischke

    4. Januar um 13:28 Uhr


Benutzeravatar von Michael Jungo
Michael Jungo

Scherz bietet beforeAll und afterAll. Wie bei test/it Es wird auf die Auflösung eines Versprechens gewartet, wenn die Funktion ein Versprechen zurückgibt.

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

Es unterstützt auch den Callback-Stil, wenn Sie einen vorhandenen Testcode haben, der Callbacks verwendet, obwohl es empfohlen wird, Promises zu verwenden.

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

  • Scherz beforeAll hört sich großartig an, besonders in Bezug auf: Promises “Wenn die Funktion ein Promise zurückgibt oder ein Generator ist, wartet Jest darauf, dass dieses Promise aufgelöst wird, bevor Tests ausgeführt werden.” Hat Jasmine das Äquivalent? Es sieht so aus, als ob Jasmine es tut nicht Unterstützungsversprechen, aber tut Unterstützung a done Callback-Ansatz? Ich verwende speziell Protractor, aber die done Rückruf funktioniert bei mir nicht wie hier beschrieben,

    – Die rote Erbse

    31. Dezember 2017 um 3:14 Uhr

  • Wo kann ich die Dokumente finden, die besagen, dass es verwendet werden kann? done() in beforeAll? Ich kann nur finden, dass es wartet versprechen

    – otong

    11. Februar 2019 um 3:43 Uhr


  • Gute Antwort, erfüllt aber nicht die Anforderung “nur einmal und nicht für jede Testdatei”.

    – Konstantin Pelepelin

    18. März 2019 um 15:58 Uhr

  • Diese Antwort ist falsch, dies geschieht einmal pro Testdatei

    – Pato Loco

    4. Juni 2021 um 13:08 Uhr

Benutzeravatar von Raheel Riaz
Rahel Riaz

Jest bietet in neuen Versionen Optionen für globales Setup und Teardown. Sie können Dateien für Setup und Teardown erstellen, indem Sie eine asynchrone Funktion exportieren und diesen Pfad in einer Scherzkonfiguration wie dieser bereitstellen.

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

Sie können darüber weiter lesen hier

  • Abgestimmt, da kein Link zu einer Quellenreferenz enthalten ist.

    – andersr

    19. August 2020 um 22:28 Uhr

Wenn Sie Jest-Tests mit npm ausführen, können Sie jeden Knotenbefehl oder jede ausführbare Datei ausführen, bevor Sie einen anderen Befehl ausführen

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

Jetzt können Sie dies mit dem Befehl ausführen

$ npm t

Benutzeravatar von Raj Gohil
Raj Gohil

Es ist sehr einfach geworden, wenn Sie es verwenden vor allen Funktion außerhalb des Beschreibungsblocks und weisen Sie ihm dann das Schlüsselwort async zu.

Hinweis: Ich verwende jest @27.4.3 Fassung hier

Codebeispiel

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();
  });
});

Ich hoffe, es hilft und löst Ihre Zweifel,

und Sie müssen es möglicherweise in jeder Datei tun, um es anzuwenden.

Sie können vorher die gesamte Dokumentation überprüfen von hier

1438390cookie-checkFühren Sie die async-Funktion einmal vor allen Tests aus

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy