2016-02-01 2 views
2

У меня есть следующий тест единицы измерения мангуста. Строка журнала консоли в обратном вызове article.save() выводит назначенный _id атрибут объекта после его сохранения из базы данных. Однако всякий раз, когда я помещал точку останова на эту строку или действительно в первую строку в соответствующем модульном тесте, объект не доступен в коллекции статей?Единица измерения Mongoose

Может ли кто-нибудь объяснить, почему это должно быть? Я изо всех сил пытаюсь понять это и буду признателен за любую помощь!

Thanks, Mark.

var app = require('../../server.js'), 
    should = require('should'), 
    mongoose = require('mongoose'), 
    User = mongoose.model('User'), 
    Article = mongoose.model('Article'); 

var user, article; 

describe('Article Model Unit Tests:', function() { 

beforeEach(function (done) { 

    user = new User({ 
     firstName: 'Full', 
     lastName: 'Last', 
     displayName: 'Full Name', 
     email: '[email protected]', 
     username: 'username', 
     password: 'password' 
    }); 

    user.save(function() { 
     article = new Article({ 
      title: 'Article Title', 
      content: 'Content Article', 
      user: user 
     }); 

     article.save(function (err, savedArticle) { 
      console.log(savedArticle._id); 
     }); 
    }); 

    done(); 
}); 

describe('Testing the save method', function() { 
    it('Should be able to save without problems', function() { 
     article.save(function (err) { 
      should.not.exist(err); 
     }); 
    }); 

    it('Should not be able to save without title', function() { 
     article.title = ''; 

     article.save(function (err) { 
      should.exist(err); 
     }); 
    }); 
}); 

afterEach(function(done) { 
    Article.remove(function(){ 
     User.remove(function(){ 
      done(); 
     }); 
    }); 
}); 
}); 

ответ

1

Я думаю Проделанная вызов должен быть перемещен внутри article.save

Как теперь, сделано() почти всегда будет вызываться до двух сохраняет полный, если сделано было перемещено то beforeeach блок будет заканчиваться только после завершения обоих сейвов.

+0

Спасибо, миллион dm03514! Я не знаю, почему это имеет значение, хотя? Что делает метод done()? Эффективно ли он очищает модель мангуста? Пользователь никогда не спасает ни в модульных тестах, ни в приложении. Извините, много вопросов, но я пытаюсь начать работу с MEAN, и на этом этапе есть больше вопросов, чем ответов. –

+0

Если я удаляю done() вообще, то статья доступна в MongoDB на консоли. Если я поместил done() после article.save() еще внутри user.save(), статья недоступна? Любая помощь здесь будет оценена. Я исхожу из фона Spring/Hibernate/Oracle, поэтому мои предположения могут быть смягчены этим. –

+1

Параметр, обычно называемый выполненным, является странным, добавляя его как параметр beforeEach или он отмечает операцию как асинхронный, если вы добавили завершенную в нее и не вызываете сделанный тестовый случай, будет ошибка. Preeach может быть странным, потому что, если он не выдаст ошибку, он перейдет в тайм-аут, а затем перейдите, чтобы выполнить его, возможно, создавая впечатление, что все работает нормально. – dm03514

Смежные вопросы