2012-11-26 18 views
10

, sık sık çalıştırmak için gereken hem asenkron ve senkron testlerin bir arada var.Mocha, sadece asenkron testlerimle beklemeyi ve zaman aşımını nasıl biliyor? Ben Mocha ile test ediyorum zaman

Mocha bu güzel benim testler asenkron ne zaman bir geri arama, done belirtmek için izin yönetir.

, nasıl Mocha içten benim testleri gözlemlemek ve asenkron aktivite için beklemesi gerektiğini biliyor mu sorum? Test işlevlerimde tanımlanan geri arama parametresi olduğunda beklemek gibi görünüyor. Aşağıdaki örneklerde görebilirsiniz, ilk test zaman aşımı olmalı, ikincisi user.save anonim işlevini çağırmadan önce devam etmeli ve bitirmelidir.

// In an async test that doesn't call done, mocha will timeout. 
describe('User', function(){ 
    describe('#save()', function(){ 
    it('should save without error', function(done){ 
     var user = new User('Luna'); 
     user.save(function(err){ 
     if (err) throw err; 
     }); 
    }) 
    }) 
}) 

// The same test without done will proceed without timing out. 
describe('User', function(){ 
    describe('#save()', function(){ 
    it('should save without error', function(){ 
     var user = new User('Luna'); 
     user.save(function(err){ 
     if (err) throw err; 
     }); 
    }) 
    }) 
}) 

Bu node.js özel büyüsü mü? Bu herhangi bir Javascript'te yapılabilecek bir şey midir? Aradığınız Ne

cevap

18

Bu saf JavaScript büyü basittir.

fonksiyonları aslında nesneleri ve bunlar özellikler (örneğin parametrelerin sayısı fonksiyonu ile tanımlanır) sahiptir. this.async mocha/lib ayarlanır nasıl

Bak/Fonksiyonlarınızdan ile tanımlanır olsun veya olmasın esaslı

function Runnable(title, fn) { 
    this.title = title; 
    this.fn = fn; 
    this.async = fn && fn.length; 
    this.sync = ! this.async; 
    this._timeout = 2000; 
    this._slow = 75; 
    this.timedOut = false; 
} 

Mocha mantığı değişiklikleri runnable.js. Bu [Buraya mocha kaynak kodunda] yapılır gibi

+0

Bu, doğru örnekle doğrudur. Fonksiyonlar için uzunluk fonksiyonu üzerindeki dokümanları görmek için George'un cevabını inceleyin. –

2

bir işlev bekliyor kaç argüman söyleyebilir Fonksiyonu'nun uzunluğu özelliktir. Bir geri bildirimi done ile tanımladığınızda, bunu uyumsuz olarak söyleyebilir ve davranabilir.

function it(str, cb){ 
    if(cb.length > 0) 
    //async 
    else 
    //sync 
} 

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/Length

+1

sayesinde görünüyor (https://github.com/visionmedia/mocha/blob/master/lib/runnable.js#L43). Ve başvuru için bir örnek, 'var fn1 = function() {}; assert.equal (fn1.length, 0); var fn2 = işlev (param) {}; assert.equal (fn2.length, 1) ' –

İlgili konular