gpt4 book ai didi

node.js - Sinon 在 NodeJS Controller 中模拟 Promise.all

转载 作者:太空宇宙 更新时间:2023-11-04 01:27:03 25 4
gpt4 key购买 nike

在 NodeJS Controller 中使用 Promise.all。无法在诗农中 mock 这一点。

Controller 调用可重用方法来获取特定数据。但是,在一种情况下,我想将附加数据附加到数组中的每个结果。使用 Promise.all 来做到这一点。然而,尽管研究了这里的问题,我还没有找到在这种情况下模拟 Promise.all 的解决方案。查看了 expect 周围的 setTimeout/done。不确定需要在此处调用 done 才能使其正常工作。

Controller

getItems()
...

let items = await Method.findAllByQuery(query);
if (userId && items) {
items = await Promise.all(items.map(async item => {
let tmpItem = item;
tmpItem.count = await AnotherMethod.countDocuments(query).exec();
return tmpItem;
}));
}
results.items = items;

兴农测试

let stubMethod = sinon.stub(Method, 'findAllByQuery');
it('Should return a 200 if userId passed', async () => {
req.userId = '123456789';
stubMethod.returns(items);
await ShowController.getItems(req, res);
expect(res.statusCode).to.equal(200);
});

结果应该是200。相反,有一个超时

错误:超时超过 10000 毫秒。对于异步测试和 Hook ,确保调用“done()”;如果返回 Promise,请确保它能够解析。

最佳答案

您不需要 stub Promise.all。您必须对函数中的所有异步方法进行 stub :Method.findAllByQuery(query)AnotherMethod.countDocuments(query).exec():

let stubMethod = sinon.stub(Method, 'findAllByQuery');
let stubExec = sinon.stub();
let stubCountDocuments = sinon.stub(AnotherMethod, 'countDocuments');
stubCountDocuments.returns(stubExec);
it('Should return a 200 if userId passed', async () => {
req.userId = '123456789';
stubMethod.resolves(items);
stubExec.resolves(1);
await ShowController.getItems(req, res);
expect(res.statusCode).to.equal(200);
});

关于node.js - Sinon 在 NodeJS Controller 中模拟 Promise.all,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57172519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com