单元测试中,咱们一般须要在执行测试代码前准备一些测试数据,创建测试场景,这些为了测试成功而所作的准备工做称为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