2016-04-11 32 views
0

biçimlendirme mocha hatayı düzeltmek için.nasıl <a href="http://git://github.com/mochajs/mocha.git" rel="nofollow">Mocha 2.4.5</a> ve kullanarak tarayıcı içi testini kurmaya çalışıyorum zaman uyumsuz iddianın

Başarısız Olmalı iddialar yararlı bir test hatası nedeni görüntüler. Aynı iddiası bir jQuery Ajax geri arama bağlamında yapıldığında
Ancak, bunun yerine bir Yakalanmayan Onaylama Hatası olsun.

şu örneği ele alalım:

mocha.setup('bdd'); 
var url = 'http://localhost/api/v2/People'; 
describe('ajax',() => { 
    var that1 = this; 
    it('Passing async assertion', (done) => { 
     $.ajax({ url: url }).done(data => { 
      should(1).be.eql(1); 
      done(); 
     }); 
    }); 
    it('Failing async assertion', (done) => { 
     var that2 = this; 
     $.ajax({ url: url }).done(data => { 
      should(0).be.eql(1); 
      done(); 
     }); 
    }); 
    it('Failing sync assertion', (done) => { 
     should(0).be.eql(1); 
     done(); 
    }); 
}); 
mocha.run(); 

'zaman uyumsuz iddiasını Geçme' geçer ve test atlet çıkışında güzel görünüyor.

'senkronizasyon iddia başarısız' başarısız ve (ince) başarısız 'uyumsuz onaylama işlemi başarısız' Bununla birlikte, kullanışlı bir stacktrace

Fail sync assertion ‣
AssertionError: expected 0 to equal 1
at Assertion.fail (http://path/to/should.js:220:17)
at Assertion.Object.defineProperty.value (http://path/to/should.js:292:19)
at Context. (tests.js:337:26)

olsun, ancak StackTrace usless olup.

Fail async assertion ‣
Error: Uncaught AssertionError (http://path/to/should.js:200)

Ben that1 veya that2için ajax bağlamı ayarlama etrafında oynadım ama hiç fark etmez.

yüzden asenkron iddialar işe test durumları biçimlendirmek için başka yolu var mı?

DÜZENLEME

Ben Mocha Sorumun sahip olarak asenkron testler biçimlendirme önermek için asynchronicity

mocha.setup('bdd'); 
describe('ajax',() => { 
    var that1 = this; 
    it('Failing async assertion', (done) => { 
     setTimeout(() => { 
      should(0).be.eql(1); 
      done(); 
     }, 100); 
    }).async = true; 
    it('Failing sync assertion', (done) => { 
     should(0).be.eql(1); 
     done(); 
    }); 
}); 
mocha.run(); 

cevap

0

docs simüle etmek için basit zaman aşımı kullanarak aynı şeyi almak, ancak bu düşünüyorum Dokümanlar, Node.js test çalıştırıcısıyla birlikte yazılır. Tarayıcıda

, bunun bir saklı değerini temel işlevi 'önce' ve sonra yapmak senkron anlatımlarda asenkron kod çalıştırmak için gerekli olduğunu görünür. Örneğin

:

mocha.setup('bdd'); 
describe('ajax',() => { 
    var value = 0; 
    before((done) => { 
     //Do the asynchronous bit 
     setTimeout(() => { 
      //store the value for later comparison 
      value = 1; 
      done(); 
     }, 100); 
    }); 
    //These wont be called until after done() is called above. 
    //So value will be 1 
    it('Failing assertion',() => { 
     should(value).be.eql(0); 
    }); 
    it('Passing assertion',() => { 
     should(value).be.eql(1); 
    }); 
}); 
mocha.run(); 

burada yararı Mocha alışkanlık (ağ gecikmesi gibi) dış etkenlere bağlı yavaş olarak uyumsuz iddialar bayrak olmasıdır.

İlgili konular

 İlgili konular