2011-11-23 3 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',() -> 

둘째, 나는 순서 또는 콜백을 등록하고 연결을 반전했습니다.

결과 자바 스크립트 :

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

그리고 결과 출력 : 내가 MongoDB를이 때 /하지 실행하지 않는 점에 유의해야합니까

$ ~/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) 

당신이 진술 한 것처럼 테스트가 실패했습니다. 따라서 연결 문자열을 확인하고 싶을 수도 있습니다.

관련 문제