2011-11-23 46 views
3

如何在nodeunit和mongoose中獲得異步結果?我試過下面的代碼,它似乎掛在數據庫回調永遠不會返回結果或錯誤。如何獲得節點單元和貓鼬的異步結果?

mongoose = require "mongoose" 
models = require "../Services/models" 
Task = models.Task 

module.exports = 
setUp: (callback) -> 
    try 
     @db = mongoose.connect "myConnString" 
     console.log 'Started connection, waiting for it to open' 


     @db.connection.on 'open',() -> 
      console.log 'Opened connection' 
      callback() 
    catch err 
      console.log 'Setting up failed:', err.message 
tearDown: (callback) -> 
    console.log 'In tearDown' 
    try 
     console.log 'Closing connection' 
     @db.disconnect() 
     callback() 
    catch err 
     console.log 'Tearing down failed:', err.message 
"get tasks" : (test) -> 
    console.log 'running first test' 
    Task.find {}, (err, result) -> 
     if not err 
      console.log 'results' + result 
      test.ok(result) 
     else 
      console.log 'error' + err 
     test.ifError(err) 
     test.done() 

回答

2

我將測試腳本從Coffee Script移植到JavaScript並在NodeUnit中運行,見下文。

雖然我改變了兩件事。首先,取代:

@db.connection.on 'open',() -> 

我這樣做(在咖啡腳本):

mongoose.connection.on 'open',() -> 

其次,我顛倒了順序或註冊回調,並進行連接。

所得的JavaScript:

var mongoose = require('mongoose'); 
var models = require('./models'); 
var Task = models.Task; 

var db; 

module.exports = { 
    setUp: function(callback) { 
     try { 
      //db.connection.on('open', function() { 
      mongoose.connection.on('open', function() { 
       console.log('Opened connection'); 
       callback(); 
      }); 

      db = mongoose.connect('mongodb://localhost/test_1'); 
      console.log('Started connection, waiting for it to open'); 
     } 

     catch (err) { 
      console.log('Setting up failed:', err.message); 
     } 
    }, 

    tearDown: function(callback) { 
     console.log('In tearDown'); 
     try { 
      console.log('Closing connection'); 
      db.disconnect(); 
      callback(); 
     } 

     catch (err) { 
      console.log('Tearing down failed:', err.message); 
     } 
    }, 

    getTasks: function(test) { 
     console.log('running first test'); 
     Task.find({}, function (err, result) { 
      if (!err) { 
       console.log('results' + result); 
       test.ok(result); 
      } else { 
       console.log('error' + err); 
      } 

      test.ifError(err); 
      test.done(); 
     }); 
    } 
}; 

Models.js

var mongoose = require('mongoose'); 

var TaskSchema = new mongoose.Schema({ 
    field1: String, 
    field2: Number 
}); 

module.exports.Task = mongoose.model('Task', TaskSchema); 

並且得到的輸出:

$ ~/node_modules/nodeunit/bin/nodeunit test.js 

test.js 
Started connection, waiting for it to open 
Opened connection 
running first test 
results 
In tearDown 
Closing connection 
✔ getTasks 

OK: 2 assertions (198ms) 

我必須注意,當MongoDB的是沒有運行/不可連接,測試失敗像你所說的。所以你可能也想檢查你的連接字符串。