[英]How to make Mocha unit test wait for async variable
我是單元測試的新手,我正在嘗試對從我的數據庫讀取的 function 編寫單元測試,但是因為讀取是異步的,所以在我的 Mocha 單元測試中該值始終未定義。 如何對異步聲明的變量進行斷言?
單元測試:
const homeController = require('../controllers/homeController');
describe('Testing home_get function', function () {
it ('should render the home page', function () {
const req = {};
homeController.home_get(req, null, () => {});
console.log("numberUsers", numberUsers);
assert.ok(numberUsers > 0);
});
});
Function 我正在嘗試測試:
module.exports.home_get = async (req, res) => {
requestTime = Date.now();
numberUsers = await User.countDocuments({});
numberViewers = await Viewer.countDocuments({});
numberAccreditors = await Accreditor.countDocuments({});
res.status('200').render('home', {numberUsers: numberUsers, numberViewers: numberViewers, numberAccreditors: numberAccreditors});
};
當我在 requestTime 變量上執行 assert 語句時,它按預期工作,但是當我在異步變量上執行時,值始終未定義,我不確定如何讓單元測試在這些異步變量上工作,也... . 然后你會如何做一個單元測試來檢查 res.status 在你渲染回家時是否正確?
你有兩種方法可以做到這一點。
您可以在測試中等待您的 function:
it ('should render the home page', async function () {
const req = {};
await homeController.home_get(req, null, () => {});
console.log("numberUsers", numberUsers);
assert.ok(numberUsers > 0);
});
或使用測試回調 function:
it ('should render the home page', function (done) {
const req = {};
homeController.home_get(req, null, () => {}).then(() => {
console.log("numberUsers", numberUsers);
assert.ok(numberUsers > 0);
done();
});
});
但是在任何一種情況下,您的 function 都應該返回一個您可以對其進行斷言的值。 在那里, numberUsers
從未被聲明並且仍然是undefined
。
編輯:除非在globals
object 中注冊,因為不使用let
、 const
或var
。 這是您可能不想做的事情。
單元測試的主要目標是僅測試一層邏輯,例如您提供的 function 本身。 其他一切都必須是模擬,否則它是您需要的集成測試而不是單元測試。
在這種情況下,您試圖在數據庫上實際運行查詢,但它實際上並沒有啟動和工作,所以您得到的是未定義的。
我建議如下:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.