Mocha için varsayılan zaman aşımını değiştirme


161

My-spec.js adlı bir birim test dosyası varsa ve mocha ile çalışıyorsa:

mocha my-spec.js

Varsayılan zaman aşımı 2000 ms olacaktır. Komut satırı parametresi ile kısmi test için üzerine yazılabilir:

mocha my-spec.js --timeout 5000

Tüm testler için varsayılan zaman aşımını global olarak değiştirmek mümkün müdür? yani, arama yaptığınızda varsayılan zaman aşımı değeri 2000 ms'den farklı olacaktır:

mocha my-spec.js

Mocha'nın resmi web sitesi de bu konuda daha fazla açıklıyor.
RaviRokkam

Yanıtlar:


305

Mocha varsayılan test/mocha.optsolarak komut satırı argümanları içerebilecek bir dosyayı okuyacaktır . Böylece aşağıdakileri içeren böyle bir dosya oluşturabilirsiniz:

--timeout 5000

Mocha'yı komut satırında her çalıştırdığınızda, bu dosyayı okuyacak ve varsayılan olarak 5 saniyelik bir zaman aşımı süresi ayarlayacaktır.

Durumunuza bağlı olarak daha iyi olabilecek başka bir yol describe, test dosyanızdaki en üst düzey bir çağrıda bu şekilde ayarlamaktır :

describe("something", function () {
    this.timeout(5000); 

    // tests...
});

Bu, yalnızca dosya başına temelinde bir zaman aşımı ayarlamanıza olanak tanır.

5000 varsayılanı istiyorsanız, ancak bazı dosyalar için farklı bir şey ayarladıysanız her iki yöntemi de kullanabilirsiniz.


Eğer arayacaksanız this.timeout(ya da thisMocha'nın sizin için ayarladığı başka bir üyeye erişecekseniz) genellikle ok işlevini kullanamayacağınızı unutmayın. Örneğin, bu genellikle çalışmaz :

describe("something", () => {
    this.timeout(5000); //will not work

    // tests...
});

Bunun nedeni, bir ok işlevinin thisişlevin göründüğü kapsamdan alınmasıdır. Mocha işlevi iyi bir değerle çağıracaktır, thisancak bu değer ok işlevinin içinden geçirilmemiştir. Mocha'nın belgeleri bu konuda şunları söylüyor :

Mocha'ya ok fonksiyonlarının (“lambdas”) geçmesi önerilmez. Bunun sözcüksel bağlanması nedeniyle, bu tür işlevler Mocha bağlamına erişemez.


1
Bilgi için teşekkürler. Ancak mocha.opts dosyasını değiştirmeye çalıştım, ancak etkilemez.
Lm.

2
Doğru yerde mi yarattınız? Mocha bu dosyayı nerede istediği konusunda çok spesifik. Mocha'yı çalıştırırsanız Mocha /home/me/src/proj/bu dosyayı arayacaktır:/home/me/src/proj/test/mocha.opts
Louis

Çok teşekkürler . Şimdi değişiklik etkilendi
lm.

this.timeout (10000); // varsayılan zaman aşımı ^ TypeError: this.timeout, Suite'te bir işlev değil. <anonymous> (/Users/jeff.l/Documents/workspace/unit-tests/mocha-chai_tests/checkoutTest.js:12:10)
Jeff Lowery

6
@JeffLowery Bir ok işlevi mi kullanıyorsunuz? Ok işlevleri yeni bir yorum oluşturmaz this, bu da genellikle this.timeoutyorumunuzda gösterdiğiniz gibi başarısız olur.
Louis

62

Sadece doğru cevaba ekleyerek zaman aşımını ok fonksiyonu ile şu şekilde ayarlayabilirsiniz:

it('Some test', () => {

}).timeout(5000)

7
Soru "tüm testler için varsayılan zaman aşımını global olarak değiştirmek" şeklindedir. Cevabınız sadece bir testi değiştirir. describe('suite', () => {...}).timeout(5000)çalışmıyor.
aleung

Önceki yanıtta olduğu gibi, önerilen çözüm şu anda etkisizdir. mochajs.org/#timeoutssetTimeout , testlerin içine açık talimatlar eklemeyi söyler .
Marco Faustinelli

bu benim için mocha @ 5 ile çalıştı (belirli bir test için)
Fernando Gabrieli

@MarcoFaustinelli Belgeleri yanlış anlıyorsunuz. SetTimeouts'un Mocha ile bir ilgisi yok. Zaman aşımı ayarlarının etkilerini göstermek için oradalar.
oligofren

33

Bunu bütünlük için ekliyoruz. (Benim gibi) dosyanızda bir komut package.jsondosyası kullanıyorsanız, --timeoutmocha seçeneğini eklemeniz yeterlidir:

"scripts": {
  "test": "mocha 'test/**/*.js' --timeout 10000",
  "test-debug": "mocha --debug 'test/**/*.js' --timeout 10000"
},

Ardından npm run test, zaman aşımı 10.000 milisaniyeye ayarlanmış olarak test paketinizi çalıştırmak için çalışabilirsiniz.


Herhangi birinin ilgilenmesi durumunda, çoğu IDE aynı zamanda test yürütme için mocha seçenekleri enjekte etmenize izin verir; örneğin, WebStorm için, bunu (yani "--timeout 10000") Run-> Konfigürasyonları Düzenle-> Ekstra Mocha Seçenekleri altına girebilirsiniz.
Rubicon

25

Mocha'nın mevcut sürümlerinde, zaman aşımı küresel olarak şu şekilde değiştirilebilir:

mocha.timeout(5000);

Yukarıdaki çizgiyi test takımınızda herhangi bir yere, tercihen spesifikasyonunuzun en üstüne veya ayrı bir test yardımcısına eklemeniz yeterlidir.


Eski sürümlerde ve yalnızca bir tarayıcıda, genel yapılandırmayı kullanarak değiştirebilirsiniz mocha.setup.

mocha.setup({ timeout: 5000 });

Dokümantasyon küresel zaman aşımı ayarını kapsayacak, ancak diğer sık karşılaşılan senaryolarda aşımını nasıl değiştirileceği ile ilgili teklifler birkaç örnek yoktur.


5
Bu Düğümde çalışmaz. Bkz. Stackoverflow.com/a/47915119/893113 . CLI seçeneği tek yolu gibi görünüyor.
paulmelnikow

Ben de tarayıcıda çalışmıyor. Bugün itibariyle, yanıtta yer alan belgeler herhangi bir timeoutparametreden bahsetmemektedir . Aksine, mochajs.org/#timeoutssetTimeout testlerin içine açık talimatlar eklemeyi söyler .
Marco Faustinelli

@MarcoFaustinelli Belgeleri yanlış anlıyorsunuz. SetTimeouts'un Mocha ile bir ilgisi yok. Zaman aşımı ayarlarının etkilerini göstermek için oradalar.
oligofren
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.