我希望同时运行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();
});
这也适用于:
it.concurrent('data should have correct values', async () => {
const data = await getDataFromRequest();
expect(data.value1).toBeTruthy();
expect(data.value2).toBeTruthy();
});
但我想要的是:
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();
});
2条答案
按热度按时间6vl6ewon1#
似乎值得指出的是,也有一个关于这个讨论在一个笑话的问题:https://github.com/facebook/jest/issues/4281
要点:它不是这样工作的,也不是计划好的。可能的解决方法:
im9ewurl2#
在使用Playwright进行浏览器测试时遇到了同样的问题,其中一个测试套件只需要一个浏览器示例。必须用带有
setInterval
的Promise Package 它。在您的情况下,它应该如下所示:因此,您只需要分配适当的检查
interval
和timeout
,它们应该足够长,以便您的数据asycn
调用返回。