如何在 Jest 中运行并发测试,每个请求进行多个测试?

Ben*_*ols 7 jestjs

我想同时运行 Jest 测试,但我在一种情况下遇到问题:

我正在端点上测试结果,并且我想测试有关它的多项内容。因此,在 beforeAll 函数中,我发出请求并存储响应,然后在多个测试中测试响应。这可以很好地同步工作,但是当我使测试并发时,它不再允许您将变量传递到测试中,所以这是行不通的。或者,我可以将请求放在测试本身中,然后期望有关响应的许多信息,但是如果出现故障,我就没有粒度来查看出了什么问题。

对于这种情况有什么解决方案吗?

这有效:

let data;

beforeAll(async () => {
  data = await getDataFromRequest();
});

it('value1 should be truthy', () => {
  expect(data.value1).toBeTruthy();
});

it('value2 should be truthy', () => {
  expect(data.value2).toBeTruthy();
});
Run Code Online (Sandbox Code Playgroud)

这也有效:

it.concurrent('data should have correct values', async () => {
  const data = await getDataFromRequest();
  expect(data.value1).toBeTruthy();
  expect(data.value2).toBeTruthy();
});
Run Code Online (Sandbox Code Playgroud)

但我想要的是:

let data;

beforeAll(async () => {
  data = await getDataFromRequest();
});

it.concurrent('value1 should be truthy', () => {
  expect(data.value1).toBeTruthy();
});

it.concurrent('value2 should be truthy', () => {
  expect(data.value2).toBeTruthy();
});
Run Code Online (Sandbox Code Playgroud)

Mo.*_*Mo. 7

似乎值得指出的是,在一个笑话问题中也有关于此的讨论: https: //github.com/facebook/jest/issues/4281

要点:它不是那样运作的,也不是计划好的。可能的解决方法:

const dataPromise = getSomeDataPromise();

test.concurrent('one', async () => {
  const data = await dataPromise;
});

test.concurrent('two', async () => {
  const data = await dataPromise;
});
Run Code Online (Sandbox Code Playgroud)