(七)Jest钩子函数作用域
一 、钩子函数的作用域
(1)、describe下都可以拥有自己的钩子函数,使用的钩子函数对自己的子describe的测试用例也适用。
(2)、每个子describe也可以设置自己需要的钩子函数,使用的钩子函数对自己的测试用例适用。
(3)、说明钩子函数是有作用域的,而且在describe的范围内,至于执行顺序是由外到内。
(4)、describe可以嵌套使用,一个describe中可以嵌套很多describe。
示例代码如下:
import Counter from './counter.js' let counter =null; describe('钩子函数',()=>{ beforeAll(()=>{ console.log('生命周期---BeforeAll--在测试用例执行之前') }) afterAll(()=>{ }) beforeEach(()=>{ counter = new Counter(); }) afterEach(()=>{ }) describe('测试加法',()=>{ beforeAll(()=>{ console.log('生命周期---BeforeAll--在测试加法') }) test('测试counter中addOne方法',()=>{ counter.addOne(); expect(counter.number).toBe(1) }) test('测试counter中addTwo方法',()=>{ counter.addTwo(); expect(counter.number).toBe(2) }) }) describe('测试减法',()=>{ beforeAll(()=>{ console.log('生命周期---BeforeAll--在测试减法') }) test('测试counter中minusOne方法',()=>{ counter.minusOne(); expect(counter.number).toBe(-1) }) }) })
运行结果如下:
从运行结果上我们可以看出对应describe中钩子函数执行顺序。
二 、Jest的only修饰符
运用.only修饰符,它只会执行加上这个标识的测试用例,跳过其他的测试用例。
import Counter from './counter.js' let counter =null; describe('钩子函数',()=>{ beforeEach(()=>{ counter = new Counter(); }) describe('测试加法',()=>{ test.only('测试counter中addOne方法',()=>{ console.log('执行addOne') counter.addOne(); expect(counter.number).toBe(1) }) test('测试counter中addTwo方法',()=>{ console.log('执行addTwo') counter.addTwo(); expect(counter.number).toBe(2) }) }) describe('测试减法',()=>{ test('测试counter中minusOne方法',()=>{ console.log('减法minusOne') counter.minusOne(); expect(counter.number).toBe(-1) }) }) })
我们发现只有ddOne测试用例会执行,其他用例直接跳过。运行结果如下: