2017-05-18 68 views
1

爲什麼我們不應該用let foo = 'test'替換beforeAll(function(){ let foo = 'test' })?如果第二種方法很好,beforeAll的目的是什麼?在Jasmine中beforeAll()的用途是什麼?

以下是官方定義的方式:beforeAll函數對包含它的describe塊執行一次且只執行一次beforeEach函數或任何規範之前的任何beforeAll函數。

+1

可以。事實上,如果你想從'beforeAll'函數外部訪問'foo',你必須。 'beforeAll'是你想要在任何測試運行之前實例化的東西。 –

回答

2

beforeAll塊與describe函數範圍內的普通代碼之間存在一些實質性差異。

beforeAll設置應該與afterAll拆卸相結合。

before*塊中的錯誤並不重要,並且不會妨礙填充規格列表和規格運行。 describe塊中的錯誤將導致空白的規格列表。

before*it塊有this as the context of current spec它可以用作推薦的方式來在塊之間共享數據。它通常比來自母方範圍的簡單變量更可取,因爲沒有以這種方式交叉污染測試的風險。 describe函數沒有這個上下文。但是,這種方法與ES6箭頭功能不兼容。

可能有茉莉花助手應該與before*it塊一起工作,例如,在角測試:

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

如果是,應該爲整個塊來定義一個常數,那麼它一定能夠不beforeAll定義:

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