Как получить асинхронный результат обратно с помощью узла узла и мангуста? - PullRequest
3 голосов
/ 23 ноября 2011

Как получить асинхронный результат обратно в 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()

1 Ответ

2 голосов
/ 19 января 2012

Я перенес тестовый скрипт из Coffee Script в JavaScript и запустил его в NodeUnit, см. Ниже.

Однако я изменил две вещи.Во-первых, вместо:

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

Я сделал это (в Coffee Script):

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 не работал / не был подключен, тесты проваливались, как вы заявили.Так что вы можете также проверить строку подключения.

...