我们正在为我的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`.
我们被困住了,关于如何执行此类测试或克服此错误的任何建议将不胜感激。谢谢。