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.