У меня есть следующий тест единицы измерения мангуста. Строка журнала консоли в обратном вызове 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();
});
});
});
});
Спасибо, миллион dm03514! Я не знаю, почему это имеет значение, хотя? Что делает метод done()? Эффективно ли он очищает модель мангуста? Пользователь никогда не спасает ни в модульных тестах, ни в приложении. Извините, много вопросов, но я пытаюсь начать работу с MEAN, и на этом этапе есть больше вопросов, чем ответов. –
Если я удаляю done() вообще, то статья доступна в MongoDB на консоли. Если я поместил done() после article.save() еще внутри user.save(), статья недоступна? Любая помощь здесь будет оценена. Я исхожу из фона Spring/Hibernate/Oracle, поэтому мои предположения могут быть смягчены этим. –
Параметр, обычно называемый выполненным, является странным, добавляя его как параметр beforeEach или он отмечает операцию как асинхронный, если вы добавили завершенную в нее и не вызываете сделанный тестовый случай, будет ошибка. Preeach может быть странным, потому что, если он не выдаст ошибку, он перейдет в тайм-аут, а затем перейдите, чтобы выполнить его, возможно, создавая впечатление, что все работает нормально. – dm03514