Comment utiliser le moka et la mongoose?

Je continue à avoir une erreur dans la méthode save () lorsque je lance le test.

var User = require('../../models/user') , should = require('should'); describe('User', function(){ describe('#save()', function(){ it('should save without error', function(done){ var user = new User({ username : 'User1' , email : '[email protected]' , password : 'foo' }); user.save(function(err, user){ if (err) throw err; it('should have a username', function(done){ user.should.have.property('username', 'User1'); done(); }); }); }) }) }) 

voici l’erreur:

 $ mocha test/unit/user.js ․ ✖ 1 of 1 test failed: 1) User #save() should save without error: Error: timeout of 2000ms exceeded at Object. (/usr/local/lib/node_modules/mocha/lib/runnable.js:1 61:14) at Timer.list.ontimeout (timers.js:101:19) 

Vous pouvez imbriquer des descriptions mais pas des tests. Chaque test est conçu pour être autonome. Ainsi, lorsque vous parcourez vos résultats, vous pouvez voir où il échoue: lors de la sauvegarde ou si vous ne possédez pas la propriété nom d’utilisateur. Par exemple, dans votre code ci-dessus, il n’y a aucun moyen d’échouer au test ‘devrait enregistrer sans erreur’ car il n’y a pas de done (). C’est également pour cette raison que le code ci-dessus arrive à expiration: mocha ne peut pas trouver le done () pour le test ‘devrait enregistrer sans erreur’.

Etre capable de nidifier est très puissant. Dans chaque description, vous pouvez avoir une déclaration avant, avant, chaque, après et après chaque. Avec ceux-ci, vous pouvez réaliser l’imbrication que vous tentez ci-dessus. Voir la documentation mocha pour plus d’informations si vous souhaitez lire ces déclarations.

La manière dont j’écrirais ce que vous essayez de réaliser est la suivante:

 var User = require('../../models/user') , should = require('should') // this allows you to access fakeUser from each test , fakeUser; describe('User', function(){ beforeEach(function(done){ fakeUser = { username : 'User1' , email : '[email protected]' , password : 'foo' } // this cleans out your database before each test User.remove(done); }); describe('#save()', function(){ var user; // you can use beforeEach in each nested describe beforeEach(function(done){ user = new User(fakeUser); done(); } // you are testing for errors when checking for properties // no need for explicit save test it('should have username property', function(done){ user.save(function(err, user){ // dont do this: if (err) throw err; - use a test should.not.exist(err); user.should.have.property('username', 'User1'); done(); }); }); // now try a negative test it('should not save if username is not present', function(done){ user.username = ''; user.save(function(err, user){ should.exist(err); should.not.exist(user.username); done(); }); }); }); });