Ich habe versucht, dies durch, Lesen SO Fragen zu denken, und ich habe einen kleinen Test erstellt:Gibt es in Jasmine irgendwelche Unterschiede zwischen beforeAll() und lassen?
describe("let",() => {
let x = 1;
it("",function() {
console.log(x + "<< it");
console.log(y + "<< it");
});
});
describe("beforeAll()",() => {
let x;
let y = 2;
beforeAll(() => {
x = 1;
});
it("",function() {
console.log(x + "<< it");
console.log(y + "<< it");
});
});
Wo wird der Ausgang wie folgt:
LOG: '1<< it'
LOG: 'undefined<< it'
LOG: '1<< it'
LOG: '2<< it'
Das bedeutet für mich, dass sowohl beforeAll() und let werden beide auf die containing-Funktion beschränkt und ausgeführt, bevor eines der enthaltenen it
s ausgeführt wird. Mit let
(und in der Tat var
) mein Verständnis von JavaScript-Scoping lässt die Ergebnisse erwarten lassen.
Dies würde in RSpec nicht passieren, wo y
im ersten Test wie beschrieben definiert werden würde außerhalb der it
s ausgeführt werden. (Dies ist der Hauptgrund, nach dem ich frage, ich würde gerne unnötigen Code bereinigen, wenn möglich, da let
sauberer ist, anstatt dass ein RSpec Hangover zu unnötiger Ausführlichkeit führt).
Gibt es irgendwelche Unterschiede zwischen beforeAll()
und let
, von denen ich nicht weiß (dass Fehler in meinem Test/Verständnis möglicherweise verschleiert haben)?