3.7 jest的前置与后置执行

jest提供了几个配置,可以在测试文件之前执行

一、globalSetup/globalTeardown

一般情况下,globalSetup中导出的变量,只能在globalTeardown中引用,如果要在测试文件中引用,需要在使用命令行参数来执行

jest --runInBand

如果是用gulp调用的jest则直接可以在config中添加,如

const gulp = require('gulp');
const jest = require('gulp-jest').default;
const moment = require('moment');
const date = moment(new Date()).format('YYYY-MM-DD-HH-mm-ss');
const publicConfig = {
    testEnvironment: "node",
    automock: false,
    runInBand: true,
    globalTeardown: "./src/config/global/teardown.js",
    globalSetup: "./src/config/global/setup.js",
    reporters: [
        "default",
        [
            "jest-html-reporters",
            {
                "pageTitle": "Test Report",
                "filename": `./report/child/${date}.html`,
                "expand": true
            }
        ]
    ]
}

gulp.task('list', function () {
    let config = publicConfig;
    config.testRegex = [
        "./src/api/login.js"
    ];
    return gulp.src('src/api').pipe(jest(config));
})

然后在globalSetup引入的js中导出异步方法

axios.defaults.baseURL = 'http://www.test.com:8080/'
module.exports = async function () {
    await axios.post(path.login, {
        'userName': defaults.user.username,
        'password': utilEncry.encrypt(defaults.pubkey, defaults.user.password)
    }).then(function (res) {
        process._cookie_ = res.headers['set-cookie'][0];
    })
}

经测试,如果用gulp调用,且参数中存在runInBand,则可以在globalSetup和globalTeardown配置中引入的 js,可以执行初始化及清理的操作,类似beforeAll和afterAll

二、setupFiles/setupFilesAfterEnv

当jest.config.js中配置了这两个参数后,就会在每个测试文件执行之前执行,setupFiles/setupFilesAfterEnv中引入的js文件不需要导出,需要在文件中显示调用即可,且经过测试,这两个参数中引入的js,如果是异步的,则无法和测试文件中进行参数传递,用async/await包装也不行,如下

async function a() {
        await axios.get('http://www.baidu.com').then( function (res) {
                global.temp = 200 ;
        })
}
a()

global.temp无法在测试文件中进行获取

下面的示例则可以

function a() {    
       global.temp = 200}
a()

三、如果想传递异步的参数,又不想加runInBand,则可以封装一个通用的异步方法,并导出

然后在beforeAll或者beforeEach等中调用即可

如下,导出异步方法

const axios = require('axios')

module.exports = async function () {
        let temp;
        await axios.get('http://www.baidu.com').then( function (res) {
                temp = res.status
        })
        return temp
}

测试文件中引入

const resolve = require('../../../setup')
describe("test", function (){
    let status;
    beforeEach( async function (){
        await resolve().then(res => {
            status = res;
        })
    })
    test("1",function (){
        expect(status).toBe(200)
    })
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值