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.
.timeout
mocha 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.
this
Ok 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
, .call
vs. onunla çalışmaz.
this
olduğ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
});