2015-09-15 2 views
0

Я пытаюсь сохранить мою модель в моем db в MongoDB. Этот код действительно работает, если я должен пройти этот путь кода при запуске узла сервера, однако, когда я пытаюсь использовать мокко для тестирования сохранения модели, он больше не сохраняется. Я подтвердил, что соединение с mongodb в порядке. Тиа является выход:Функция сохранения Mongoose не выполняется

Перед регулярным сохранить после регулярного сохранения

Любые советы и предложения будут высоко оценены. благодаря!

Это тест, который я запускаю.

var app = require('./helpers/app'); 
var User = require('../models/user'); 
var supertest = require('supertest'); 
var should = require('should'); 
var mongoose = require('mongoose'); 
var MongoUrl = require('./../config.js').mongoUri 
var clearDB = require('mocha-mongoose')(MongoUrl); 
var testuser = { 
    username:"admin1", 
    password:"password", 
    email:"[email protected]", 
    firstname:"testfirst", 
    lastname:"testlast", 
    phonenumber:"4151231234" 
}; 

describe("Routing", function() { 
describe("Creating an account", function() { 

    //To run before each test. DB Clean up is implicitly done after each test. 
    beforeEach(function(done) { 
     if (mongoose.connection.db) { 
      return done(); 
     } 
     mongoose.connect(dbURI, done); 
    }); 

    it('User: Creating an account2', function(done){ 
     var newUser = new User({ 
      username: "testusername", 
      email: "[email protected]", 
      password: "password", 
      phoneNumber: "12312312", 
      firstname: "testfirst", 
      lastname: "testlast" 
     }); 
     console.log("before regular save"); 
     newUser.save(function(err){ 
      if(err){ 
       console.log("testerror: " + err); 
      } 
      console.log("in regular save"); 
     }); 
     console.log("after regular save"); 
     User.find({}, function(err, docs){ 
      if (err) return done(err); 

      console.log(docs); 

      docs.length.should.equal(1); 
      done(); 
     }); 
    }); 
}); 
}); 
+0

Что делает ваш выход Мокко выглядеть? Выполняется ли тест или истекает ли он? Это было бы полезно знать. Похоже, что тест может быть просто отключен, прежде чем функция сохранения будет уволена. – KJ3

+0

, основанный на выходе, как и вызов сохранения, просто пропущен, так как оператор журнала впоследствии печатает – ctng1213

ответ

1

Model#save является функцией асинхронной, так что вы должны ждать, пока он не называет свою функцией обратного вызова, прежде чем вы можете ожидать, чтобы быть в состоянии найти сохраненный документ с Model.find вызовом.

Так поставить find проверку внутри save обратного вызова:

it('User: Creating an account2', function(done){ 
    var newUser = new User({ 
     username: "testusername", 
     email: "[email protected]", 
     password: "password", 
     phoneNumber: "12312312", 
     firstname: "testfirst", 
     lastname: "testlast" 
    }); 
    console.log("before regular save"); 
    newUser.save(function(err){ 
     if(err){ 
      console.log("testerror: " + err);     
      return done(err); 
     } 
     console.log("in regular save"); 
     console.log("after regular save"); 
     User.find({}, function(err, docs){ 
      if (err) return done(err); 

      console.log(docs); 

      docs.length.should.equal(1); 
      done(); 
     }); 
    }); 
}); 
+0

Спасибо вам большое ... это было проблемой! – ctng1213