2017-05-18 7 views
1

Warum sollten wir nicht einfach beforeAll(function(){ let foo = 'test' }) durch let foo = 'test' ersetzen? Was ist der Zweck von beforeAll, wenn der zweite Weg in Ordnung ist?Was ist der Zweck von beforeAll() in Jasmine?

Hier ist übrigens die offizielle Definition: Die beforeAll-Funktion wird einmal und nur einmal für den beschreibenden Block ausgeführt, der sie enthält, vor einer der beforeEach-Funktionen oder einer der Spezifikationen.

+1

Sie können:

beforeAll(fakeAsync(() => { asyncInitializationThatDoesntNeedDoneCallback(); })); 

Wenn es eine Konstante ist, die für den gesamten Block definiert werden soll, dann kann es sicherlich ohne beforeAll definiert werden. Wenn Sie von außerhalb der Funktion 'beforeAll' auf' foo' zugreifen wollen, müssen Sie dies tun. 'beforeAll' steht für Dinge, die Sie instanziieren möchten, bevor einer der Tests ausgeführt wird. –

Antwort

2

Es gibt einige wesentliche Unterschiede zwischen beforeAll Block-und Plain-Code im Bereich describe Funktion.

beforeAll Setup soll mit afterAll Teardown gekoppelt werden.

Fehler in before* Blöcke sind nicht kritisch und verhindern nicht, dass die Liste der Spezifikationen ausgefüllt wird und Spezifikationen ausgeführt werden. Ein Fehler in describe Block führt zu einer leeren Liste von Spezifikationen.

before* und it Blöcke haben this as the context of current spec, die als empfohlene Möglichkeit verwendet werden können, Daten zwischen Blöcken zu teilen. Es ist im Allgemeinen besser als einfache Variablen aus dem übergeordneten Bereich, da kein Risiko besteht, Tests auf diese Weise zu verseuchen. describe Funktion hat diesen Kontext nicht. Dieser Ansatz ist jedoch nicht mit ES6-Pfeilfunktionen kompatibel.

Es kann Jasmin-Helfer geben, die in Verbindung mit before* und it Blöcken arbeiten sollen, z. in Winkelprüfung:

describe('...',() => { 
    const foo = 'test'; // not let 
    ... 
});