前端自动化测试 - Jest钩子函数篇(三)

2020-07-27  本文已影响0人  __Nancy

基础配置在前端自动化测试 - Jest基础配置篇(一)

1.Jest中四个钩子函数

beforeAll()钩子函数的意思是在所有测试用例之前进行执行。比如:

beforeAll(()=>{
    console.log('上课铃响了~~~~')
})

写完后,保存文件,会自动执行测试。这时候可以在控制台看到上课铃响了~~~~。执行之后可以看到这句话最先执行了。然后才走下面的测试用例。

beforeEach()钩子函数,是在每个测试用例前都会执行一次的钩子函数,比如我们写如下代码

beforeEach(()=>{
    console.log('老师走进教室')
})

保存后可以看到,每个测试用例执行之前都会先执行一下这个函数。

afterEach()钩子函数,是在每次测试用例完成测试之后执行一次的钩子函数,比如下面的代码。

afterEach(()=>{
    console.log('老师离开教室')
})

afterAll()钩子函数是在完成所有测试用例之后才执行的函数。

afterAll(()=>{
    console.log('下课')
})

保存后,可以在控制台看到afterAll是最后执行的。这个用于测试都完成后调用某个方法。
工作中最常用的四个钩子函数就是这四个函数了,为了方便学习下面是全部代码:

//index.js
export function kecheng1(money){
    return money>=200?'名师辅导':'自学'
}

export function kecheng2(money){
    return money>=1000?'双语教程':'普通教程'
}
//index.test.js
import {kecheng1,kecheng2} from './index.js'
beforeAll(()=>{
    console.log('上课铃响了~~~~')
})
beforeEach(()=>{
    console.log('老师走进教室')
})
afterEach(()=>{
    console.log('老师离开教室')
})
afterAll(()=>{
    console.log('下课')
})
test('学习1 300元',()=>{
    console.log('名师辅导')
    expect(kecheng1(300)).toBe('名师辅导')
})

test('学习2  2000元',()=>{
    console.log('双语教程')
    expect(kecheng2(2000)).toBe('双语教程')
})

运行后:


image.png
2.在项目中肯定会存在多个用例需要测试,那么就需要分组,Jest 引入describe ()代码如下:
//index.test.js
import {kecheng1,kecheng2} from './index.js'
beforeAll(()=>{
    console.log('上课铃响了~~~~')
})
beforeEach(()=>{
    console.log('老师走进教室')
})
afterEach(()=>{
    console.log('老师离开教室')
})
afterAll(()=>{
    console.log('下课')
})
describe('学习相关课程',()=>{
    console.log('学习相关课程')
    test('学习1 300元',()=>{
        console.log('名师辅导')
        expect(kecheng1(300)).toBe('名师辅导')
    })

    test('学习2  2000元',()=>{
        console.log('双语教程')
        expect(kecheng2(2000)).toBe('双语教程')
    })
})

执行结果如下:


image.png
3.学习了describe分组,就是为了讲解钩子作用域。Jest中钩子函数的作用域有下面三个特色:

钩子函数在父级分组可作用域子集,类似继承

import {kecheng1,kecheng2} from './index.js'
describe('最外层分组',()=>{
    console.log('最外层分组')
    beforeAll(()=>{
        console.log('上课铃响了~~~~')
    })
    beforeEach(()=>{
        console.log('老师走进教室')
    })
    afterEach(()=>{
        console.log('老师离开教室')
    })
    afterAll(()=>{
        console.log('下课')
    })
    describe('学习相关课程',()=>{
        console.log('学习相关课程')
        test('学习1 300元',()=>{
            console.log('名师辅导')
            expect(kecheng1(300)).toBe('名师辅导')
        })
    
        test('学习2  2000元',()=>{
            console.log('双语教程')
            expect(kecheng2(2000)).toBe('双语教程')
        })
    })
})

执行结果:


image.png

先执行外部的钩子函数,再执行内部的钩子函数

import {kecheng1,kecheng2} from './index.js'
describe('最外层分组',()=>{
    beforeAll(()=>{
        console.log('上课铃响了~~~~')
    })
    beforeEach(()=>{
        console.log('老师走进教室')
    })
    afterEach(()=>{
        console.log('老师离开教室')
    })
    afterAll(()=>{
        console.log('下课')
    })
    describe('学习相关课程',()=>{
        afterEach(()=>{
            console.log('开始听课~~~~~~~~~~~')
        })
        console.log('学习相关课程')
        test('学习1 300元',()=>{
            console.log('名师辅导')
            expect(kecheng1(300)).toBe('名师辅导')
        })
    
        test('学习2  2000元',()=>{
            console.log('双语教程')
            expect(kecheng2(2000)).toBe('双语教程')
        })
    })
})

执行结果:


image.png

钩子函数同级分组作用域互不干扰,各起作用

import {kecheng1,kecheng2} from './index.js'
describe('最外层分组',()=>{
    beforeAll(()=>{
        console.log('上课铃响了~~~~')
    })
    beforeEach(()=>{
        console.log('老师走进教室')
    })
    afterEach(()=>{
        console.log('老师离开教室')
    })
    afterAll(()=>{
        console.log('下课')
    })
    describe('学习相关课程1',()=>{
        afterEach(()=>{
            console.log('开始听课~~~~~~~~~~~1111')
        })
        console.log('学习相关课程')
        test('学习1 300元',()=>{
            console.log('名师辅导')
            expect(kecheng1(300)).toBe('名师辅导')
        })
    })
    describe('学习相关课程2',()=>{
        afterEach(()=>{
            console.log('开始听课~~~~~~~~~~~2222')
        })
        console.log('学习相关课程')
        test('学习2  2000元',()=>{
            console.log('双语教程')
            expect(kecheng2(2000)).toBe('双语教程')
        })
    })
})

执行结果:


image.png
上一篇下一篇

猜你喜欢

热点阅读