簡體   English   中英

單元測試/用sinon模擬貓鼬模型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM