2016-12-11 5 views
0

とマングースモデルのモック:だからユニットテストは/ので、私は次のようにノードモジュールを持っている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?アドバイスありがとう!

答えて

0

だから、私はちょうどproxyquirehttps://www.npmjs.com/package/proxyquireを発見しました。そして、天のように開いて、輝かしい "ああハ"の瞬間のために私に光を照らしていました。それらを使用しようとする前にモンゴーズでモデルを読み込む必要はありません! mongoose.model機能をスタブすることは、私が制御することができます何かを返すようにしながら、効果的に、attach-userモジュールをロードします

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); 

モックマングースのコードは次のように見えます。その後、私のテストの残りの部分はモジュール関数を呼び出すだけで、アサーションを期待通りに行うことができます。

関連する問題