笑话:依次测试API调用

时间:2018-07-24 21:21:26

标签: promise jestjs fetch-api

我们正在为我的React应用程序创建一个测试套件,该套件使用自定义的DotNet Core 2.1 Web API。为了测试数据的完整流,我们希望JS代码进行API调用并测试响应。所有这些当前都有效,但是这些调用都是同时进行的,在测试下一个之前,我们需要一些API调用来完成。

我们通过按照需要的顺序对所需的API调用进行了排列来解决了这一问题,并对其进行了一次forEach:

data.create.forEach((entity) => {
  return testForPost(data.data[entity].name, data.data[entity].postUrl, data.data[entity].body.POST);
});

但是,即使测试是异步的,它实际上也不会等待承诺解决才继续。

const testForPost = (name, url, body) => {
  test(`Add New ${name} is successful`, async () => {
    await expect(API.fetchApi({ url, method: 'POST', body })).resolves.toHaveProperty('id');
 });
};

当我们使用该模型进行测试时,由于没有完成API调用,并且随后的一个依赖于此,因此最终导致错误。

我们通过制作一个单独的异步方法来解决此问题,该方法将等待每个测试再继续。

async function asyncForEach(array, callback) {
  for (let index = 0; index < array.length; index += 1) {
    await callback(array[index], index, array);
  }
}

const runPosts = async () => {
  await asyncForEach(data.create, async (entity) => {
    testForPost(data.data[entity].name, data.data[entity].postUrl, data.data[entity].body.POST);
  });
};

runPosts();

有了这个,我们得到了一个完全不同的错误,但是找不到有关如何克服它的任何指导:

Tests cannot be nested. Test `Add New Item B is successful` cannot run because it is nested within `Add New Item A is successful`.

我们被困住了,关于如何执行此类测试或克服此错误的任何建议将不胜感激。谢谢。

0 个答案:

没有答案