單元測試中,咱們一般須要在執行測試代碼前準備一些測試數據,創建測試場景,這些爲了測試成功而所作的準備工做稱爲Test Fixture。而測試完畢後也須要釋放運行測試所需的資源。這些鋪墊工做佔據的代碼可能隨着測試複雜度的增長而增長。爲了不在每一個測試用例裏重複這些代碼,測試框架通常都會提供安裝(Setup)和拆卸(Teardown)函數。javascript
Jasmine提供了4個全局函數用於安裝和拆卸:java
函數名稱 | 描述 |
beforeEach | 在每個測試用例執行以前都執行一遍beforeEach函數 |
afterEach | 在每個測試用例執行完成以後都執行一遍afterEach函數 |
beforeAll | 在測試套件中全部測試用例執行以前執行一遍beforeAll函數 |
afterAll | 在測試套件中全部測試用例執行完成以後執行一遍afterAll函數 |
這些函數接受一個回調函數做爲參數,執行相關的安裝代碼和拆卸代碼。例如:框架
describe(‘Player’, function() { var player; beforeEach(function() { player = new Player(); }); afterEach(function() { /* cleanup code */ }); it(‘should be able to play a Song’, function() { /* code and assertions */ }); });
在Jasmine中describe塊能夠嵌套,因此測試用例能夠定義在任何一層describe塊裏。理解Jasmine安裝和拆卸函數在嵌套describe狀況下的執行順序,有助於合理組織測試用例。函數
咱們使用如下這個例子:單元測試
describe('Jasmine Execution Sequence', function () { beforeAll(function () { console.log('outer beforeAll'); }); beforeEach(function () { console.log('outer beforeEach'); }); it('spec 1', function () { console.log('spec 1'); }); console.log('statement 1'); describe('inner', function () { beforeAll(function () { console.log('inner beforeAll'); }); afterAll(function () { console.log('inner afterAll'); }); console.log('statement 3'); beforeEach(function () { console.log('inner beforeEach'); }); it('spec 3', function () { console.log('spec 3'); }); afterEach(function () { console.log('inner afterEach'); }); }); it('spec 2', function () { console.log('spec 2'); }); console.log('statement 2'); afterEach(function () { console.log('outer afterEach'); }); afterAll(function () { console.log('outer afterAll'); }); });
輸出結果以下:測試
statement 1 statement 3 statement 2 outer beforeAll outer beforeEach spec 1 outer afterEach inner beforeAll outer beforeEach inner beforeEach spec 3 inner afterEach outer afterEach inner afterAll outer beforeEach spec 2 outer afterEach outer afterAll
以上示例有這樣的輸出結果是由於:spa