2012-11-10 19 views
8

Testi yürüttüğümde save() yönteminde bir hata alıyorum. Burada mocha ve mongoose ile nasıl kullanmalıyım?

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(); 
     }); 
     }); 
    }) 
    }) 

}) 

hatadır:

$ mocha test/unit/user.js 

    ․ 

    ✖ 1 of 1 test failed: 

    1) User #save() should save without error: 
    Error: timeout of 2000ms exceeded 
     at Object.<anonymous> (/usr/local/lib/node_modules/mocha/lib/runnable.js:1 
61:14) 
     at Timer.list.ontimeout (timers.js:101:19) 
+0

biz' gerçek işlevinden username' özelliğini ayarlayabilirsiniz nasıl şöyledir: Ben size ulaşmak için çalışıyoruz ne yazardı

yoludur. özellik ('kullanıcı adı', 'Kullanıcı1'); '? Gerçek fonksiyonda 'res.send ({username:' User1 '}) 'veya' res.render (' home ', {username:' User1 '}) 'olarak gönderebilir miyiz? Ben bu testi çalıştırdığınızda –

cevap

7

iç içe yerleştirebilirsiniz açıklar ama o test eder. Her testin tek başına kalması amaçlanmıştır, bu yüzden sonuçlarınızı incelediğinizde, kullanıcı adı özelliğini kaydetme veya kaydetme konusunda nerede başarısız olduğunu görebilirsiniz. Örneğin, yukarıdaki kodunuzda, hiçbir hata olmadığı için 'hatasız olarak kaydetme' testinin başarısız olmasının bir yolu yoktur(). Yukarıdaki kodun zaman aşımına uğramasının nedeni de budur: mocha 'hatasız olarak kaydetme' testi için done() öğesini bulamıyor.

Açıklayabilmek için tarif edebilmek çok güçlüdür. Her bir açıklamada, öncesinde, öncesinde, sonra, sonra ve sonra bir İfadeye sahip olabilirsiniz. Bununla, yukarıda çalıştığınız yuvalamayı başarabilirsiniz. Bu ifadeleri okumak istiyorsanız daha fazla bilgi için mocha belgelerine bakın. Biz user.should.have `kullanıcı adı özelliği olsun, böylece

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]ample.com' 
     , 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(); 
     }); 
    }); 
    }); 
}); 
+0

alıyorum: '\t \t o (fonksiyonu (yapıldı) { \t \t ^^ 'kullanıcı adı özelliği olmalıdır' SyntaxError: Beklenmeyen identifier' "buna (" ' – chovy

+0

Nevermind sevmez Bu çok yardımcı oldu Teşekkürler bu çok yardımcı olur. – chovy

+0

Eğer ilk açıklamanın ikinci bir çocuk olarak başka bir açıklama eklerseniz, User.rmeove() herhangi bir etkisi yoktur. – chovy

İlgili konular