2015-11-09 51 views
0

我有一個問題,在節點上的一些mocha測試 - 我正在測試一個模型,並調用模型的方法來獲得響應 - 只是Model.findOne方法。NodeJS - 測試模型,不接收回調

在主代碼庫中按預期方式返回(與在數據庫中查詢時一樣),但是當測試它無法到達回調並且測試只是超時時..有什麼想法可能會引起什麼問題?從摩卡

輸出:

1) user model tests check user exists email should equal input: [email protected]: 
Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test. 

對我來說,這似乎是一個配置問題 - 但我不能在哪裏工作。下面

代碼:

userTest.js

var Chance = require('chance'); 
 
var expect = require('chai').expect; 
 
var supertest = require('supertest'); 
 
var api = supertest('http://localhost:3000'); 
 
var chance = new Chance(); 
 
var User = require('../api/models/UserModel').User; 
 

 
var validUser = { 
 
    email: '[email protected]', 
 
    password: "123456" 
 
}; 
 

 
describe.only('user model tests', function() { 
 

 
    describe('check user exists', function() { 
 

 
     it("email should equal input: " + validUser.email, function (done) { 
 
      User.findOneByEmail(validUser.email, function (err, result) { 
 
       expect(result.email).to.equal(validUser.email); 
 
       done(); 
 
      }); 
 
     }); 
 

 
    }); 
 
});

UserModel.js

UserSchema.statics.findOneByEmail = function(email, callback) { 
 
    this.findOne({email: email}, function (err, user) { 
 

 
     if (err) { 
 
      return callback(systemError()); 
 
     } 
 

 
     if (!user) { 
 
      return callback(fileNotFoundError()); 
 
     } 
 

 
     return callback(null, user); 
 
    }); 
 
};

+0

可以顯示User.findOneByEmail函數的列表嗎? 我認爲這可能是麻煩的根源。也許它會拋出錯誤,並且在此函數上停止執行腳本。 – vodolaz095

+0

我已經添加了它。我在代碼的其他部分使用了相同的函數,它的工作方式和預期的一樣,我只是在測試環境中沒有得到任何響應。 –

+0

您應該使用「user.findOneByEmail」,因爲您已經在「user」中注入了「User」類。 – sayume

回答

1

正如我所看到的,您正在使用貓鼬。因此,在開始測試之前,您必須先連接到您的mongodb。例如,您可以在before部分執行此操作。

Mongoose connect函數支持回調。

before(function (done) { 
    mongoose.connect('mongodb://localhost/test', done); 
});