2014-12-07 22 views
6

Jasmine 2.1 kullanıyorum. Bir modülü test etmek için Jasmine 2.1 kullanmaya çalışıyorum. Modüllerimden biri, kodu senkronize olmayan bir şekilde yürüten bir işleve sahiptir. Uygulama yürütüldüğünde işlev sonucunu test etmem gerekiyor. Bunu yapmanın bir yolu var mı? Şu anda, benim modül şöyle görünür: Aşağıdaki ile benim Modülü sınamak çalışıyorumYasemin ile Eşzamansız Geri Aramaların Test Edilmesi

var otherModule = require('otherModule'); 
function MyModule() { 
} 

MyModule.prototype.state = ''; 
MyModule.prototype.execute = function(callback) { 
    try { 
    this.state = 'Executing'; 
    var m = new otherModule.Execute(function(err) { 
     if (err) { 
     this.state = 'Error'; 
     if (callback) { 
      callback(err); 
     } 
     } else { 
     this.state = 'Executed'; 
     if (callback) { 
      callback(null); 
     } 
     } 
    }); 
    } catch (ex) { 
    this.state = 'Exception'; 
    if (callback) { 
     callback(ex); 
    } 
    } 
}; 

module.exports = MyModule; 

:

var MyModule= require('./myModule'); 
describe("My Module", function() { 
    var myModule = new MyModule(); 
    it('Execute', function() { 
    myModule.execute(); 
    expect(myModule.state).toBe('Executed'); 
    }); 
}); 

Açıkçası, deney yürütme gerçekleşmesi için beklemiyor. Asenkron yürütme işlevini Jasmine üzerinden nasıl sınarım? Ayrıca, durum değişkenini uygun şekilde mi kullanıyorum? Eşzamansız yığında kayboluyorum ve 'this' adresini kullanabileceğimden emin değilim.

cevap

8

async section of the jasmine docs'a göz atmanızı öneririz. Yani, bu bilgilerle böyle bir şey test etmeden önce bitmesini yürütülmesi için beklenecek bir done geri arama kullanabilirsiniz:

var MyModule= require('./myModule'); 
describe("My Module", function() { 
    var myModule = new MyModule(); 
    it('Execute', function(done) { 
    myModule.execute(function(){ 
     expect(myModule.state).toBe('Executed'); 
     done(); 
    }); 
    }); 
}); 
+0

biz 'kullanmak (...) bekleyebilirsiniz emin misiniz Tobe (... .) 'async geri arama içinde? –

+0

Sadece kontrol, evet, Jasmine 2.1 için çalışıyor. 2.0 öncesi yasemin için async desteği tamamen farklı görünüyor. –

+0

@VlasBashynskyi evet, yasemin artık asenks desteği var. 'Done() 'denilene kadar bekleyecektir. (Varsayılan olarak 5 saniye zaman aşımı) – Hlung

İlgili konular