Jest测试教程之三:Jest中的Setup及Teardown


在软件开发的过程中,测试的重要性就不用多说了。在测试中有些行为是重复性的,比如一些变量/资源的初始化及关闭等。有些操作必须在测试前完成,有些操作则需要在测试结束后被调用。下面介绍如何在JavaScript测试框架Jest中使用Setup/Teardown来实现代码重用。

Jest
Jest

beforeEach及afterEach

如果针对不同测试,都需要完成某些初始化工作,就可以使用beforeEach和afterEach。例如:如果测试代码需要连接到服务器才能测试,同时在测试结束后必须要关闭连接的话:

JavaScript
beforeEach(() => {
  establishConnection();
});

afterEach(() => {
  closeConnection();
});

test('test retrieved data', () => {
  // 这时beforeEach会被调用
  expect(registered('xxx')).toBeTruthy();
  // 这时afterEach会被调用
});

test('test retrieved data 2', () => {
  // 这时beforeEach会被调用
  expect(registered('yyy')).toBeTruthy();
  // 这时afterEach会被调用
});

对于异步调用,同样也可以在beforeEach/afterEach中使用,如果公共方法返回一个Promise,那么在beforeEach中,同样也可以返回一个Promise:

JavaScript
beforeEach(() => {
  return establishConnection();
});

beforeAll和afterAll

对于有些初始化工作,针对当前文件中的所有测试,只需要执行一次,这时就可以使用beforeAll/afterAll。

使用describe对测试分组

如果再需要细分的话,还可以使用describe来对测试进行分组:

JavaScript
// 下面方法将会在当前文件的所有测试之前被调用
beforeEach(() => {
  return init();
});

describe('matching students to courses', () => {
  // 下面的beforeEach仅应用于describe方法内的测试
  beforeEach(() => {
    return connectToDatabase();
  });

  test('xxx', () => {
    expect(matched('9001', 'Math')).toBe(true);
  });

  test('yyy', () => {
    expect(matched('9002', 'Physics')).toBe(true);
  });
});

需要注意的是,上面代码中的init会在connectToDatabase之前被调用。


文章作者: 逻思
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 逻思 !