jest 之辅助函数运用

作者: tww844475003 分类: 前端开发 发布时间: 2022-09-25 21:43

写测试用例的时候,我们经常需要进行测试之前做一些准备工作,和在进行测试后需要进行一些整理工作。Jest提供辅助函数来处理这个问题。

一次性设置

如何要为测试设置初始化值等,且只会执行一次,可以使用 beforeAll、afterAll

let i = 0;
let j = 0;

beforeAll(() => {
  ++i;
  console.log(`beforeAll ${i}`);
});

afterAll(() => {
  j++;
  console.log(`afterAll ${j}`)
})

describe('test', () => {
  test('test1', () => {
    console.log(`test1 ${i}`);
  })
  test('test2', () => {
    console.log(`test2 ${j}`);
  })
})

输出:

beforeAll 1

test1 1

test2 0

afterAll 1

多次测试重复设置

如果你有一些要为多次测试重复设置的工作,可以使用 beforeEach、afterEach。

let i = 0;
let j = 0;

beforeEach(() => {
  ++i;
  console.log(`beforeEach ${i}`);
});

afterEach(() => {
  j++;
  console.log(`afterEach ${j}`)
})

describe('test', () => {
  test('test1', () => {
    console.log(`test1 ${i}`);
  })
  test('test2', () => {
    console.log(`test2 ${j}`);
  })
})

输出:

beforeEach 1

test1 1

afterEach 1

beforeEach 2

test2 1

afterEach 2

作用域

before 和 after 的块可以应用到文件中的每一个测试。此外还可以通过 describe 块来将测试中的某一块进行分组。当 before 和 after 的块在 describe 块内部的时候,则只适用于该 describe 块内的测试。

let i = 0;
let j = 0;

beforeEach(() => {
  ++i;
  console.log(`beforeEach ${i}`);
});

afterEach(() => {
  j++;
  console.log(`afterEach ${j}`)
})

describe('test1', () => {
  beforeEach(() => {
    console.log(`beforeEach test1 inner ${i}`)
  })
  afterEach(() => {
    console.log(`afterEach test1 inner ${i}`)
  })
  test('test1', () => {
    console.log(`test1 ${i}`);
  })
})

describe('test2', () => {
  test('test2', () => {
    console.log(`test2 ${j}`);
  })
})

输出:

beforeEach 1

beforeEach test1 inner 1

test1 1

afterEach test1 inner 1

afterEach 1

beforeEach 2

test2 1

afterEach 2

执行顺序

let i = 0;
let j = 0;

beforeAll(() => {
  console.log('1-beforeAll');
})
afterAll(() => {
  console.log('1-afterAll');
})

beforeEach(() => {
  ++i;
  console.log(`1-beforeEach ${i}次`);
});

afterEach(() => {
  ++j;
  console.log(`1-afterEach ${j}次`);
})

describe('test1', () => {
  let m = 0;
  let n = 0;
  beforeAll(() => {
    console.log('2-beforeAll inner');
  });

  afterAll(() => {
    console.log('2-afterAll inner');
  });

  beforeEach(() => {
    ++m;
    console.log(`2-beforeEach test1 inner ${m}次`)
  })
  afterEach(() => {
    ++n;
    console.log(`2-afterEach test1 inner ${n}次`)
  })
  test('test1', () => {
    console.log(`test1 ${i}`);
  })
})

describe('test2', () => {
  test('test2', () => {
    console.log(`test2 ${j}`);
  })
})

输出

1-beforeAll

2-beforeAll inner

1-beforeEach 1次

2-beforeEach test1 innner 1次

test1 1

2-afterEach test1 innner 1次

1-afterEach 1次

2-afterAll inner

1-beforeEach 2次

test2 1

1-afterEach 2次

1-afterAll

前端开发那点事
微信公众号搜索“前端开发那点事”

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注