玩笑测试是否等待之前的异步测试解决?

use*_*776 5 async-await jestjs

我读到同一个测试文件中的笑话测试是按顺序执行的。我还读到,在编写涉及回调的测试时,done应该使用参数。

但是,当使用我在下面的代码中使用的异步/等待语法的承诺时,我可以指望测试按顺序运行和解析吗?

import Client from '../Client';
import { Project } from '../Client/types/client-response';

let client: Client;

beforeAll(async () => {
    jest.setTimeout(10000);
    client = new Client({ host: 'ws://127.0.0.1', port: 8080 , logger: () => {}});
    await client.connect();
})


describe('Create, save and open project', () => {
    let project: Project;
    let filename: string;

    beforeAll(async () => {
        // Close project
        let project = await client.getActiveProject();
        if (project) {
            let success = await client.projectClose(project.id, true);
            expect(success).toBe(true);
        }
    })

    test('createProject', async () => {
        project = await client.createProject();
        expect(project.id).toBeTruthy();
    });

    test('projectSave', async () => {
        filename = await client.projectSave(project.id, 'jesttest.otii', true);
        expect(filename.endsWith('jesttest.otii')).toBe(true);
    });

    test('projectClose', async () => {
        let success = await client.projectClose(project.id);
        expect(success).toBe(true);
    });

    test('projectOpen', async () => {
        project = await client.openProject(filename);
        expect(filename.endsWith('jesttest.otii')).toBe(true);
    });
})

afterAll(async () => {
    await client.disconnect();
})
Run Code Online (Sandbox Code Playgroud)

Bri*_*ams 3

来自文档

...默认情况下,Jest 按照在收集阶段遇到的顺序连续运行所有测试,等待每个测试完成并在继续之前进行整理。

因此,虽然Jest可以并行运行测试文件,但默认情况下它会串行运行文件中的测试

该行为可以通过以下测试来验证:

describe('test order', () => {

  let count;

  beforeAll(() => {
    count = 0;
  })

  test('1', async () => {
    await new Promise((resolve) => {
      setTimeout(() => {
        count++;
        expect(count).toBe(1);  // SUCCESS
        resolve();
      }, 1000);
    });
  });

  test('2', async () => {
    await new Promise((resolve) => {
      setTimeout(() => {
        count++;
        expect(count).toBe(2);  // SUCCESS
        resolve();
      }, 500);
    });
  });

  test('3', () => {
    count++;
    expect(count).toBe(3);  // SUCCESS
  });

});
Run Code Online (Sandbox Code Playgroud)