2012-03-26 3 views

Antwort

55

Sent-Pull-Request für diese Funktion (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

Warum nicht auf setTimeout() Spionage?

Etwas wie:

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

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

Danke. Dies sind Integrationstests, bei denen node.js einen externen Dienst aufruft, der oft langsam ist. –

+0

das ist brilliant, es ermöglicht es, das Timeout zu testen, ohne den Test auf das tatsächliche Timeout zu warten – Guillaume

+0

auf diese Weise üben wir nicht den Zeitablauf aus und rufen das fn sofort auf, während das Original es nie zuvor aufruft der nächste Zyklus. –

42

Um den globalen Jasmin-Knoten Timeout, dies zu tun:

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

Kredit an Entwickler Gabe Hicks, um den .getEnv() -Teil über das Debugging trotz Fehlinformation herauszufinden n in der README doc, die behauptet, dass es getan wird, indem Sie jasmine.DEFAULT_TIMEOUT_INTERVAL festlegen.

Wenn Sie ein benutzerdefiniertes Timeout nur für ein it() festlegen möchten, können Sie versuchen, das Timeout (Millisekunden) als drittes Argument (nach der Zeichenfolgenanweisung und der Funktion) zu übergeben. Es gibt ein Beispiel dafür here getan, aber ich bin mir nicht sicher, was passieren würde, wenn das benutzerdefinierte Timeout länger als Jasmines Standard war. Ich erwarte, dass es scheitern würde.

+26

Update für alle, die 2014 auf diese Antwort stolpern: Für Jasmine 2 Einstellung jasmine.DEFAULT_TIMEOUT_INTERVAL funktioniert. –

+0

funktioniert nicht mehr – Blacksonic

+1

Es funktioniert für mich auf ein brandneues Setup mit Jest + Jasmine. Ich habe gerade '' '' Jasmine.DEFAULT_TIMEOUT_INTERVAL = 12000; '' 'in einer globalen Konfigurationsdatei hinzugefügt, die ich für alle Tests verwende und es funktioniert wie erwartet. –

17

Sieht aus wie Sie es jetzt als das letzte Argument für die it Funktion hinzufügen:

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

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

53

Sie können (jetzt) ​​setzen es direkt in der Spezifikation, wie pro 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 Dies sollte jetzt die akzeptierte Antwort sein. – willydee

+0

Ja, das Ändern von '' 'Jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;' '' Wert hat den Trick für mich in einem brandneuen Setup von Grund auf neu mit Jasmine + Jest. Es funktioniert wie erwartet. –

-6

ändern j $ .DEFAULT_TIMEOUT_INTERVAL bis 10000 in folgende Datei: npm \ node_modules \ Jasmin-core \ lib \ Jasmin-Core

+3

... und verlieren die Änderung beim ersten Update –

0

Hinzufügen: jasmine.DEFAULT_TIMEOUT_INTERVAL = yourTime; auf einer Hilfsdatei für mich gearbeitet.

Verwandte Themen