2016-07-25 1 views
1

私は、を介してこれを考えてSOの質問を読んでみましたし、私は少しのテスト作成しました:ジャスミンでは、beforeAll()とletの間に違いはありますか?

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

出力は次のとおりです。

LOG: '1<< it' 
LOG: 'undefined<< it' 
LOG: '1<< it' 
LOG: '2<< it' 

これは、両方のbeforeAllように私には意味を()とletの両方が包含関数にスコープされ、含まれるいずれかが実行される前に実行されます。itlet(と実際にはvar)と私はJavaScriptのスコープを理解することで期待される結果が得られます。

yitの外部で実行されるため、最初のテストで定義されるRSpecではこれは起こりません。 (これは私が求めている主な理由です。可能であれば、letが不要なコードをクリーンアップしたいのですが、RSpecの二日酔いが不必要な冗長性につながるのではなく)。

beforeAll()letの間に私の知りません(私のテスト/理解の欠陥は難読化されているかもしれません)の間に違いがありますか?

答えて

1

beforeAllコールバックは、仕様thisにアクセスでき、非同期にすることができます。

thisコンテキストが仕様で使用されていない場合、私は(必要に応じてafterAllとペアにすることができます)セットアップアクションにlet /定数のconstbeforeAllを使用することをお勧めします。

関連する問題