2017-04-27 1 views
0

ich eine Funktion in einigen meiner Winkelmesser Tests genannt werden, die einige Aufgaben tut, die mehr als die Winkelmesser Standard-Timeout nehmen (die 60 Sekunden zu sein scheint)Ändern Winkelmesser Standard-Timeout innerhalb Funktion

ich gelesen habe dass Sie in der Lage sein sollten, das Standard-Timeout mit "jasmine.DEFAULT_TIMEOUT_INTERVAL" zu ändern, aber mit dem folgenden Code passiert das Timeout immer noch vor den 4 Minuten, die ich eingerichtet habe. Da ich diesen Testteil in Zukunft wiederverwenden möchte, kann ich ihn nicht einfach als Parameter zur Testfunktion hinzufügen.

Hier ist der Beispielcode, kann mir jemand sagen, was ich falsch mache?

describe('reset data', function() { 
    it('should reset data', function() { 
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 240000; 

    browser.ignoreSynchronization = true; 

    // ... test code here 
    }); 
}); 

bekomme ich folgende Fehler, nach dem Test nach etwa 60 Sekunden ausfällt:

Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

+0

Sie die Timeout-docs gelesen haben? https://github.com/angular/protractor/blob/master/docs/timeouts.md Die Syntax in Ihrer Spezifikation für das Timeout ist nicht korrekt (und ich würde es in der Konfiguration trotzdem setzen, nicht die Spezifikation) – Gunderson

+0

Mehrere Beiträge Ich habe via Google direkt in der Spezifikation verwendet. Wie ich in der Antwort hinzugefügt habe, möchte ich nicht, dass der gesamte Test eine Zeitüberschreitung von z.B. 4 Minuten, nur einige Befehle, die eine lange Zeit benötigen, um zu beenden. Ich möchte nicht, dass 100 Befehle ein 4-Minuten-Timeout haben, wenn nur 2 von ihnen es brauchen. –

+0

Sicher, aber jetzt scheint es, dass Ihre Tests nach 60 Sekunden ablaufen. Das 'Jasmine.DEFAULT_TIMEOUT_INTERVAL = 240000;' scheint also nichts zu tun. – Gunderson

Antwort

0

sein Probieren Sie stattdessen:

Durch eine rekursive Funktion zu identifizieren, wenn es vorhanden ist.

function checkIfPresent(maxSec, elm, blnPresent) { 
    if (maxSec > 0) { 
     browser.sleep(1000).then(function() { 
      elm.isPresent().then(function(bln) { 
       if (bln != blnPresent) { 
        checkIfPresent(maxSec - 1, elm, blnPresent) 
       } 
      }); 
     }); 
    } 
} 

Wenn Sie checkIfPresent geben (300000, Ulme, true)
Es wird überprüft, ob das Objekt in jeder Sekunde vorhanden ist, innerhalb von 5 Minuten.
Hoffe es hilft. :)

Vorheriger Kommentar:
Ich stimme dem Kommentar zu.
Es sollte (conf.js) auf config-Datei deklariert werden

jasmineNodeOpts: { 
    onComplete: null, 
    isVerbose: true, 
    showColors: true, 
    includeStackTrace: true, 
    defaultTimeoutInterval: 1000000 
} 
+0

Das wird mir nicht helfen. Dieser Test soll zwei separate Timeouts haben. Der erste ist für etwas, das ich weiß, dauert lange, bis zu mehreren Minuten. Zum Beispiel: die ersten 3 Anrufe sollten Timeout 4 Minuten haben, verbleibende Anrufe sollten nur bis zu 30 Sekunden dauern. –

+0

Gibt es ein bestimmtes Element, auf das Sie warten, um zu erscheinen oder zu verschwinden? –

+0

Überprüfung für dieses Element ist kein Problem, das Problem ist, dass ich den Test habe, wo das erste Element 3-4 Minuten dauert, danach sollte es sofort (unter 30s) für den Rest sein, und ich will nicht Stellen Sie eine ganze Spezifikation auf 4-5 Minuten wegen EINEM Anruf ein. –

Verwandte Themen