2014-03-30 80 views
0

我創建一個單元測試來測試護照,第一步是創建一個用戶。創建用戶超時並且測試無法進行。貓鼬插入永遠不會返回單元測試

測試(login.js):

'use strict'; 
var app = require('../index'), 
    kraken = require('kraken-js'), 
    mongoose = require('mongoose'), 
    User = mongoose.model('User'), 
    should = require('chai').should(), 
    Q = require('q'), 
    agent = require('supertest'), 
    cookie, 
    pUser = { 
     firstName: 'pasport-test', 
     lastName: 'user', 
     userName: 'passport-user', 
     email: '[email protected]', 
     password: '[email protected]@ssw0rd' 
    } 

    describe('#create user and log them in with passport', function() { 
     this.timeout(10000); 
     var mock; 
     beforeEach(function (done) { 
      kraken.create(app).listen(function (err, server) { 
       mock = server; 
       done(err); 
      }); 
     }); 


     afterEach(function (done) { 
      mock.close(done); 
     }); 

     describe('#login the user', function() { 
      it('should create a user', function (done) { 
       var user = new User({ 
        firstName: pUser.firstName, 
        lastName: pUser.lastName, 
        userName: pUser.userName, 
        email: pUser.email, 
        password: pUser.password 
       }); 
       user.save(function(err, data) { 
        if(err) { 
         done(err); 
        } else { 
         done(); 
        } 
       }); 
       //it should then login that user with passport 
      }); 
     }); 

如果我連Ø直接貓鼬:

mongoose.connect("mongodb://localhost/testing"); 

,並要求用戶這樣說:

User = require('../models/user'); 

它的工作原理。

我想使用的服務器和連接的beforeEach與海怪設置,使刀片在配置數據庫發生......

問題是爲什麼貓鼬插入就再也回不來了測試?

+0

我不清楚你的意思......我假設傳遞給'user.save'的回調沒有被調用,所以測試超時。我對嗎? – Esteban

回答

2

您需要在測試代碼中調用mongoose.connect。貓鼬隊列所有掛起的操作,直到第一個數據庫連接,這就是爲什麼你的save回調永遠不會被調用。

0

正如@Peter Lyons所述,我需要執行連接到數據庫。

我寫了一個小幫手來做這件事(我可以在我的測試文件中使用)。

db.js:

'use strict'; 
var nconf = require('nconf'), 
    mongoose = require('mongoose'), 
    env = process.env.NODE_ENV || 'testing'; 

//get the db config stuff for mongoose from the application config file 
nconf.use('file', { 
    file: process.cwd() + '/config/app.json', 
    format: nconf.formats.json 
}); 
var dbConf = nconf.get('databaseConfig')[env]; 



var db = function() { 
    return { 
     connect: function() { 
      if(!mongoose.connection.db) { 
       mongoose.connect("mongodb://" + dbConf.host + '/' + dbConf.database); 
      } 
     } 
    }; 
}; 

module.exports = db(); 

然後在我的測試:

var db = require('./db'); 

db.connect(); 

和模型類達到預期效果。