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?
Führen Sie die async-Funktion einmal vor allen Tests aus
Roy
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
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 adone
Callback-Ansatz? Ich verwende speziell Protractor, aber diedone
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()
inbeforeAll
? 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
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
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