Yasemin düğümlü eşzamansız spesifikasyonda zaman aşımını nasıl değiştiririm


92

Bloklar için çalıştırmalara / beklemelere başvurmadan bu testi nasıl geçebilirim?

it("cannot change timeout", function(done) {

     request("http://localhost:3000/hello", function(error, response, body){

         expect(body).toEqual("hello world");

         done();
     });
});

Yanıtlar:


107

Jasmine belgelerine göre (şimdi) doğrudan spesifikasyonda ayarlayabilirsiniz .

describe("long asynchronous specs", function() {

    var originalTimeout;

    beforeEach(function() {
        originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
        jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
    });

    it("takes a long time", function(done) {
        setTimeout(function() {
            done();
        }, 9000);
    });

    afterEach(function() {
        jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
    });
});

Evet, değişen jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;değer, Jasmine + Jest kullanılarak sıfırdan oluşturulmuş yepyeni bir kurulumda benim için hile yaptı. Beklendiği gibi çalışıyor.
Ignacio Segura

@Willydee'ye katılıyorum, cloudinary ile ilgili sorunlar yaşadım ve bu küçük parçacık kurtarmaya geldi.
Dev Yego

1
Belki de bunun it. Teste donegirdiğiniz zaman DEFAULT_TIMEOUT_INTERVAL, daha önce itbaşlamış olduğunuz şeylere çoktan bağlanmış gibi görünüyor .
2020

81

Bu özellik için çekme isteği gönderildi ( https://github.com/mhevery/jasmine-node/pull/142 )

it("cannot change timeout", function(done) {

  request("http://localhost:3000/hello", function(error, response, body){

     expect(body).toEqual("hello world");

     done();
  });

}, 5000); // set timeout to 5 seconds

43

Genel Jasmine-Node zaman aşımını ayarlamak için şunu yapın:

jasmine.getEnv().defaultTimeoutInterval = timeoutYouWouldPrefer;// e.g. 15000 milliseconds

Yasemin.DEFAULT_TIMEOUT_INTERVAL ayarlayarak yapıldığını iddia eden README belgesindeki yanlış bilgilere rağmen .getEnv () bölümünü hata ayıklama yoluyla bulması için geliştirici Gabe Hicks'e kredi verin .

Yalnızca bir it () için özel bir zaman aşımı ayarlamak istiyorsanız, zaman aşımını (milisaniye) üçüncü bir argüman olarak (dize ifadesi ve işlevden sonra) geçirmeyi deneyebilirsiniz. Burada bunun bir örneği var , ancak özel zaman aşımı Jasmine'in varsayılanından daha uzun olsaydı ne olurdu emin değilim. Başarısız olacağını umuyorum.


29
2014'te bu yanıtı bulan herkes için güncelleme: Jasmine 2 yasemin ayarı için.DEFAULT_TIMEOUT_INTERVAL çalışır.
Simon Groenewolt

2
Jest + Jasmine kullanan yepyeni bir kurulumda benim için çalışıyor. jasmine.DEFAULT_TIMEOUT_INTERVAL = 12000;Tüm testler için kullandığım global bir yapılandırma dosyası ekledim ve beklendiği gibi çalışıyor.
Ignacio Segura

23

Görünüşe göre artık bunu işlev için son bağımsız değişken olarak ekleyebilirsin it:

describe('my test', function(){
    it('works', function(done){
        somethingAsync().then(done);
    }, 10000); // changes to 10 seconds
});

13

Angular'da, bunu açıklama bloğunuzun dışına koyun:

jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

Bu, .spec.ts dosyasındaki tüm testler için geçerlidir


3

Ekleme: jasmine.DEFAULT_TIMEOUT_INTERVAL = yourTime;bir yardımcı dosyada benim için çalıştı.


3

İfadenin arkasına koyun describe:

describe("A saves to DB", function() {
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

0

Neden casusluk yapmıyorsun setTimeout()?

Gibi bir şey:

var spy = spyOn(window, 'setTimeout').andCallFake(function (func, timeout) {
    expect(timeout).toEqual(2500);
    func();
});

setTimeOut(function () { ... }, 2500);
expect(spy).toHaveBeenCalled();

1
Teşekkürler. Bunlar entegrasyon testleridir, node.js genellikle yavaş olan bir harici hizmete seslenir.
Brian Low

bu harika, testi gerçek zaman aşımını bekletmeden zaman aşımını test etmeyi mümkün kılıyor
Guillaume

bu şekilde zamanın geçişini yapmayız ve fn'yi hemen çağırmayız, orijinal ise onu bir sonraki döngüden önce asla çağırmaz.
André Werlang

0

Benim durumumda birden fazla test vakam vardı ve yukarıda belirtilen çözümü kullanırken aşağıdakileri kullanıyordum:

    beforeEach(function() {
        originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
        jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
    });

DEFAULT_TIMEOUT_INTERVAL ilk test senaryosunda güncellenmedi, bu yüzden şunu eklemek zorunda kaldım:

  beforeAll(() => {
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
  })

tüm testleri başarıyla çalıştırmak için koduma.


0

Bunu tüm testlerinizde global olarak yapmak için (e2e veya entegrasyon testi durumunda) bir yardımcı kullanabilirsiniz.

Doğru yapılandırıldığında bir yardımcı dosya, testler yürütülmeden önce yüklenmeli ve DEFAULT_TIMEOUT_INTERVAL'ı genel olarak değiştirmenize izin vermelidir:

spec / support / yasemin.json

{
    ...
    "helpers": [
        "/path/to/helpers/**/*.ts"
    ]
}

yardımcılar / timeout.ts

jasmine.DEFAULT_TIMEOUT_INTERVAL = 300000;

-18

J $ .DEFAULT_TIMEOUT_INTERVAL'i aşağıdaki dosyada 10000 olarak değiştirin: npm \ node_modules \ jasmine-core \ lib \ jasmine-core


Test her çalıştırıldığında kitaplıkların kurulduğu senaryolar için verimli değildir. Ör: - CI üzerinde Cloud çalıştırma.
domino_katrino
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.