Bir test durumunda bir ağ isteği gönderiyorum, ancak bu bazen 2 saniyeden uzun sürüyor (varsayılan zaman aşımı).
Tek bir test senaryosunun zaman aşımını nasıl artırabilirim?
Bir test durumunda bir ağ isteği gönderiyorum, ancak bu bazen 2 saniyeden uzun sürüyor (varsayılan zaman aşımı).
Tek bir test senaryosunun zaman aşımını nasıl artırabilirim?
Yanıtlar:
Buyrun: http://mochajs.org/#test-level
it('accesses the network', function(done){
this.timeout(500);
[Put network code here, with done() in the callback]
})
Ok fonksiyonu için aşağıdaki gibi kullanın:
it('accesses the network', (done) => {
[Put network code here, with done() in the callback]
}).timeout(500);
before(function(done){this.timeout(5 * 1000);...});
.timeout(500)sonuna ekleit(...).timeout(500)
Es6 ok işlevlerini kullanmak istiyorsanız, tanımınızın .timeout(ms)sonuna a ekleyebilirsiniz it:
it('should not timeout', (done) => {
doLongThing().then(() => {
done();
});
}).timeout(5000);
En azından bu dizgide çalışıyor.
.timeoutmocha için DefinitelyTyped yazımlarına dahil değildir: i.imgur.com/jQbWCn1.png - Normal bir eski işlevle this.timeout(2000)veya this.slow(500)düzenli bir şekilde kullanmak veya hatasız derler
it, işe yaramıyor describe.
describe()ya context()?
.timeoutşimdi de DefinitelyTyped en Mocha typings dahildir: Mocha.IRunnable. Bununla birlikte, bu testleri çalıştırmak için Webstorm IDE'yi kullanıyorsanız, bir uyarı notu: Hangi nedenle olursa olsun, WebStorm'un Mocha entegrasyon eklentisi hala .timeout()ekli Mocha testlerini tanımıyor (yani yanlarında 'çalıştırma' düğmesi görünmüyor), ve böylece this.timeout()onun yerine kullanımına izin vermek için ok işlevlerinden kaçınmayı savunuyorum .
(bugün bununla karşılaştığımdan beri)
ES2015 yağ oku sözdizimini kullanırken dikkatli olun:
Bu başarısız olur:
it('accesses the network', done => {
this.timeout(500); // will not work
// *this* binding refers to parent function scope in fat arrow functions!
// i.e. the *this* object of the describe function
done();
});
EDIT: Neden başarısız:
@Atoth yorumlardaki bahisler gibi, yağ ok işlevleri kendi yok bu bağlayıcı. Bu nedenle, mümkün değil o kadar bağlama işlevin bu geri arama ve sağlamak zaman aşımı işlevi.
Alt satır : Artan zaman aşımı gerektiren işlevler için ok işlevlerini kullanmayın.
thisOk işlevleri üzerinde bir bağ yoktur - aynı şekilde bir çeşit, sadece farklı olduklarını düşündürmez. Sadece sözcüksel kapsamları var. Varolmayanları bağlayamazsınız. Bu yüzden .bind, .callvs. onunla çalışmaz.
thisolduğunu takip ettim .
NodeJS'de kullanıyorsanız, package.json içinde zaman aşımı süresini ayarlayabilirsiniz
"test": "mocha --timeout 10000"
o zaman npm kullanarak çalıştırabilirsiniz:
npm test
Farklı bir yaklaşım benimsemeyi ve ağ kaynağına yapılan çağrıyı bir saplama veya sahte nesne ile değiştirmeyi de düşünebilirsiniz. Sinon'u kullanarak , geliştirme çabalarınıza odaklanarak uygulamayı ağ hizmetinden ayırabilirsiniz.
Aşağıdakilerin test edilmesinde Express:
const request = require('supertest');
const server = require('../bin/www');
describe('navegation', () => {
it('login page', function(done) {
this.timeout(4000);
const timeOut = setTimeout(done, 3500);
request(server)
.get('/login')
.expect(200)
.then(res => {
res.text.should.include('Login');
clearTimeout(timeOut);
done();
})
.catch(err => {
console.log(this.test.fullTitle(), err);
clearTimeout(timeOut);
done(err);
});
});
});
Örnekte test süresi 4000'dir (4s).
Not: test süresi içinde çağrıldığından setTimeout(done, 3500)daha küçüktür done, ancak clearTimeout(timeOut)tüm bu zamanlardan kaçının.
Bu benim için çalıştı! Daha önce çalışması için hiçbir şey bulunamadı ()
describe("When in a long running test", () => {
it("Should not time out with 2000ms", async () => {
let service = new SomeService();
let result = await service.callToLongRunningProcess();
expect(result).to.be.true;
}).timeout(10000); // Custom Timeout
});