[英]Why is Mocha ignoring asynchronous function calls?
我正在用 Mocha 和 Chai 編寫自動化集成測試。 這是我正在測試的代碼的簡化版本:
exports.doSomething = async function (req, res) {
return executeRequest(req.body)
.then((response) => {
console.log("then running");
res.status(200).send(response);
})
.catch((err) => {
console.error(err);
res.status(500).send(err);
}
}
這是我的測試文件的樣子:
const { doSomething } = require("../../index");
const { assert } = require("chai");
const { stub } = require("sinon");
const req = { body: { *data* } };
const res = {
status: stub().returnsThis(),
send: stub().returnsThis(),
};
it(`Please work`, async () => {
await doSomething(req, res);
}
發生這種情況時,既不會輸入.then
塊,也不會輸入.catch
塊console.log
不會運行; res.send
和res.status
永遠不會被調用。
另一個有趣的注意事項:如果我從測試調用中刪除async
並將doSomething()
的結果保存到變量中,它將顯示為一個承諾。 當我包含async
時, doSomething
的結果是未定義的。
我是 Mocha 的新手,不知道為什么它似乎忽略了代碼的異步性。
您的doSomething
實現已損壞, async
函數返回的承諾將立即履行 - 在executeRequest
完成之前。 你應該寫
exports.doSomething = function (req, res) {
return executeRequest(req.body)
//^^^^^^
.then((response) => {
console.log("then running");
res.status(200).send(response);
})
.catch((err) => {
console.error(err);
res.status(500).send(err);
})
}
或者
exports.doSomething = async function (req, res) {
try {
const response = await executeRequest(req.body);
// ^^^^^
console.log("then running");
res.status(200).send(response);
} catch(err) {
console.error(err);
res.status(500).send(err);
}
}
只有這樣您的測試才能正確await
doSomething(req, res)
調用,並且 mocha 不會過早終止該進程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.