[英]Unit testing / Mocking mongoose models with sinon
所以我有一個像這樣的節點模塊:
let mongoose = require('mongoose'),
User = mongoose.model('User');
module.exports = (req, res, next) => {
User.findById(req.user)
.then(user => {
req.body.user = user._id;
req.body.company = user.company;
next();
}, err => {
req.send(400, err);
});
};
因此,在這種情況下,我想確保將正確的東西連接到req.body
。 那么,我將如何模擬User
函數? 我必須先加載模型,以便此代碼在調用mongoose.model
之前不會引發錯誤,因此可能與實際存根全局require
? 感謝您的任何建議!
因此,我剛剛發現proxyquire
https://www.npmjs.com/package/proxyquire ,就好像天堂開了,在最光榮的“ proxyquire
”時刻照亮了我。 無需再嘗試使用貓鼬加載模型!
模擬貓鼬的代碼如下所示:
const proxyquire = require('proxyquire'),
expect = require('chai').expect,
Promise = require('bluebird'),
_ = require('lodash'),
USERID = 'abc123',
COMPANY = 'Bitwise',
mongooseStub = {
mongoose: {
model: (name, schema) => ({
findById: () => {
return new Promise((resolve, reject) => {
resolve({_id: USERID, company: COMPANY});
});
}
})
}
},
attachUser = proxyquire('../lib/users/attach-user', mongooseStub);
這將有效地加載attach-user
模塊,同時對mongoose.model
函數進行存根以返回我可以控制的東西。 然后,我的其余測試僅調出模塊功能,並可以按預期進行聲明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.