• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
小码哥-倩倩
博客园    首页    新随笔    联系   管理    订阅  订阅

(六)Jest中钩子函数

在jest中,如果测试用例中需要使用到某个对象 或 在执行测试代码的某个时刻需要做一些必要的处理,直接在测试文件中写基础代码是不推荐的,可以使用jest的钩子函数。

钩子函数概念:在代码执行的某个时刻,会自动运行的一个函数。

首先我们举例:新建counter.js文件,代码如下:

export default class Counter{
	constructor(){
		this.number = 0 ;
	}
	addOne(){
		this.number += 1;
	}
	minusOne(){
		this.number -= 1;
	}
}

编写对应的测试用例:counter.test.js文件,代码如下:

import  Counter  from './counter.js'
const counter = new Counter();
test('测试counter中addOne方法',()=>{
	counter.addOne();
	expect(counter.number).toBe(1)
})
test('测试counter中minusOne方法',()=>{
	counter.minusOne();
	expect(counter.number).toBe(0)
})

上边的测试用例可以正常执行,但是addOne()函数调用的次数会影响counter.number的值,就会影响到minusOne方法执行结果。如果你想addOne与minusOne方法调用互不影响时,此时就不得不引入jest的钩子函数。

1>beforeAll:在所有测试用例执行之前执行一次

import  Counter  from './counter.js'
let counter =null;
beforeAll(()=>{
	console.log('beforeAll')
	counter = new Counter();
})
test('测试counter中addOne方法',()=>{
	counter.addOne();
	expect(counter.number).toBe(1)
})
test('测试counter中minusOne方法',()=>{
	counter.minusOne();
	expect(counter.number).toBe(0)
})

注意:使用beforeAll时,需要把之前const类型修改成let 。此时还是会相互影响,依旧不能达成目标。

2>beforeEach:在每个测试用例执行之前执行一次

import  Counter  from './counter.js'
let counter =null;
beforeAll(()=>{
	console.log('beforeAll')
})
beforeEach(()=>{
	console.log('beforeEach')
	counter = new Counter();
	console.log('counter.number',counter.number)
})
test('测试counter中addOne方法',()=>{
	counter.addOne();
	expect(counter.number).toBe(1)
})
test('测试counter中minusOne方法',()=>{
	counter.minusOne();
	expect(counter.number).toBe(0)
})

此时直接执行npm run test命令时会有一个用例执行失败,执行结果如图所示:  

 

此时返回的结果已经不是0了 ,而是-1!此时addOne 与minusOne两个测试用例已经不会相互影响了。每次执行测试用例前,counter都会初始化!

3>afterAll:在所有测试用例执行完之后执行一次

 

4>afterEach:在每个测试用例执行完成之后执行一次

import  Counter  from './counter.js'
let counter =null;
beforeAll(()=>{
	console.log('beforeAll')
	counter = new Counter();
	console.log('counter.number',counter.number)
})
afterAll(()=>{
	console.log('afterAll')
})
beforeEach(()=>{
	console.log('beforeEach')
	counter = new Counter();
})
afterEach(()=>{
	console.log('afterEach')
})
test('测试counter中addOne方法',()=>{
	counter.addOne();
	expect(counter.number).toBe(1)
})
test('测试counter中minusOne方法',()=>{
	counter.minusOne();
	expect(counter.number).toBe(-1)
})

钩子函数执行顺序:

根据上边案例实际打印结果可以看出这四个钩子函数的执行顺序,如下:

(1)beforeAll > (2)beforeEach > (3)afterEach > (4)afterAll

靠前的一次优先执行。

 

 

 

 

  

  

 

 

 

 

 

  

posted @ 2020-05-06 16:14  小码哥-倩倩  阅读(372)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3