2012-03-26 8 views

risposta

55

richiesta di pull mandato per questa funzione (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 
1

Perché non spiando setTimeout()?

Qualcosa di simile:

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

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

Grazie. Questi sono test di integrazione, node.js sta chiamando a un servizio esterno che è spesso lento. –

+0

questo è geniale, permette di testare il timeout senza fare in modo che il test attenda il timeout effettivo – Guillaume

+0

in questo modo non esercitiamo il passare del tempo e chiamiamo il fn subito, mentre l'originale non lo chiama mai prima il prossimo ciclo. –

42

Per impostare il timeout Jasmine-Node globale, fare questo:

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

credito allo sviluppatore Gabe Hicks per aver scoperto la parte di .getEnv() tramite il debugging nonostante misinformatio n nel README doc che afferma che è fatto impostando jasmine.DEFAULT_TIMEOUT_INTERVAL.

Se si desidera impostare un timeout personalizzato solo per uno(), è possibile provare a passare il timeout (millisecondi) come terzo argomento (dopo l'istruzione stringa e la funzione). C'è un esempio di ciò che viene fatto here, ma non sono sicuro di cosa succederebbe se il timeout personalizzato fosse più lungo di quello predefinito di Jasmine. Mi aspetto che fallirebbe.

+26

Aggiornamento per chiunque inciampi in questa risposta nel 2014: Per l'impostazione di Jasmine 2 funziona jasmine.DEFAULT_TIMEOUT_INTERVAL. –

+0

non funziona più – Blacksonic

+1

Funziona per me su una configurazione completamente nuova utilizzando Jest + Jasmine. Ho appena aggiunto '' 'jasmine.DEFAULT_TIMEOUT_INTERVAL = 12000;' '' su un file di configurazione globale che uso per tutti i test e funziona come previsto. –

17

Sembra che ora è possibile aggiungerlo come l'ultimo argomento per la funzione it:

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

http://stackoverflow.com/a/9957990/218196 –

53

si può (ora) impostare direttamente nelle specifiche, come per Jasmine docs.

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; 
    }); 
}); 
+2

@Brian Questa dovrebbe essere la risposta accettata ora. – willydee

+0

Sì, cambiando '' 'jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;' '' valore ha fatto il trucco per me su una configurazione completamente nuova costruita da zero usando Jasmine + Jest. Funziona come previsto. –

-6

Change j $ .DEFAULT_TIMEOUT_INTERVAL a 10000 nel seguente file: NPM \ node_modules \ gelsomino-core \ lib \ gelsomino-core

+3

... e perdere la modifica sul primo aggiornamento –

0

Aggiunta: jasmine.DEFAULT_TIMEOUT_INTERVAL = yourTime; su un file helper ha lavorato per me.

Problemi correlati