Javascript 说笑,定义全局变量是否与在BeforeAll中定义的一样?

Javascript 说笑,定义全局变量是否与在BeforeAll中定义的一样?,javascript,unit-testing,jestjs,Javascript,Unit Testing,Jestjs,使用笑话编写单元测试时。为什么要使用beforeAll而不是简单地将值直接赋给全局变量,反之亦然 例如,以下两个片段之间有什么区别 片段1 const mock = { key1: 'val1', key2: 'val2' }; describe('Test Cases', () => { test('Case 1', () => { // tests that use mock variable }); test('Case 2', () => {

使用笑话编写单元测试时。为什么要使用beforeAll而不是简单地将值直接赋给全局变量,反之亦然

例如,以下两个片段之间有什么区别

片段1

const mock = { key1: 'val1', key2: 'val2' };

describe('Test Cases', () => {
  test('Case 1', () => {
    // tests that use mock variable
  });

  test('Case 2', () => {
    // more tests that use mock variable
  });
});
片段2

const mock = {};

beforeAll(() => {
  mock.key1 = 'val1';
  mock.key2 = 'val2';
});

describe('Test Cases', () => {
  test('Case 1', () => {
    // tests that use mock variable
  });

  test('Case 2', () => {
    // more tests that use mock variable
  });
});

在您的示例中,这没有任何区别。然而,在某些情况下,使用beforeAll是有意义的:如果您有异步代码,则返回承诺的函数

如果从beforeAll回调返回承诺,则可以在测试中轻松测试该承诺最终解析为的值

引述:

在某些情况下,您只需要在文件开头执行一次安装。当设置是异步的时,这可能会特别麻烦,因此您不能只内联执行。Jest提供了前后处理这种情况的方法。 例如,如果initializeCityDatabase和clearCityDatabase都返回了承诺,并且城市数据库可以在测试之间重用,那么我们可以将测试代码更改为:


这是有道理的!谢谢你,先生!
beforeAll(() => {
    return initializeCityDatabase();
});

afterAll(() => {
    return clearCityDatabase();
});

test('city database has Vienna', () => {
    expect(isCity('Vienna')).toBeTruthy();
});

test('city database has San Juan', () => {
    expect(isCity('San Juan')).toBeTruthy();
});