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)
})
})