2016-09-27 5 views
7

Ich habe Winkelmesser Tests lokal gut laufen (DirectConnect: True), aber wenn ich versuche, sie auf einem Remote-Selenium-Server (Grid) laufen zu lassen, bekomme ich immer Folgendes Botschaft.Jasmine Spec Timeout beim Ausführen von Winkelmesser Tests auf einem Remote Selen Server

A Jasmine spec timed out. Resetting the WebDriver Control Flow. 

Mit Blick auf den Fehlern, die Nachricht und Stapel folgende für alle meine Testfälle angezeigt werden:

Message: 
    Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL. 
Stack: 
    Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL. 
    at Timer.listOnTimeout (timers.js:92:15) 

ich eine Reihe von Dingen versucht habe, wie die Jasmin-Timeout-Zeit zu erhöhen, das Hinzufügen frühere Timeouts wie "getPageTimeout" und "allScriptsTimeout" für das conf, aber es löst immer noch den Jasmine-Timeout-Fehler aus. Das Protokoll zeigt den folgenden Fehler:

00:03:18.328 INFO - Done: [execute async script: try { return (function (rootSelector, ng12Hybrid, callback) { 
var el = document.querySelector(rootSelector); 

try { 
    if (!ng12Hybrid && window.getAngularTestability) { 
    window.getAngularTestability(el).whenStable(callback); 
    return; 
    } 
    if (!window.angular) { 
    throw new Error('window.angular is undefined. This could be either ' + 
     'because this is a non-angular page or because your test involves ' + 
     'client-side navigation, which can interfere with Protractor\'s ' + 
     'bootstrapping. See http://git.io/v4gXM for details'); 
} 
    if (angular.getTestability) { 
    angular.getTestability(el).whenStable(callback); 
} else { 
     if (!angular.element(el).injector()) { 
    throw new Error('root element (' + rootSelector + ') has no injector.' + 
     ' this may mean it is not inside ng-app.'); 
    } 
    angular.element(el).injector().get('$browser'). 
     notifyWhenNoOutstandingRequests(callback); 
} 
} catch (err) { 
callback(err.message); 
} 
}).apply(this, arguments); } 
catch(e) { throw (e instanceof Error) ? e : new Error(e); }, [body, false]]) 

Ich weiß sicher, meine App ist eckig und es wird erfolgreich ausgeführt, wenn lokal ausgeführt wird. Ich habe versucht,

browser.ignoreSynchronization = true 

Einstellung sowie die

rootElement='html#ng-app' 

in der Conf-Einstellung (bc meine ng-App nicht im Körper, sondern vielmehr innerhalb des HTML-Tag). Framework ist auf 'Jasmin' eingestellt, obwohl ich 'Jasmine2' ausprobiert habe, aber keiner scheint einen Unterschied zu machen. Auf dem Remote-Server kann ich Firefox starten, und die Benutzeroberfläche zeigt mir die gestartete Firefox-Sitzung. Es sitzt jedoch nur dort, bis die Zeitüberschreitung auftritt. Irgendwelche Eingaben würden geschätzt werden!

Antwort

2

Jasmine muss wissen, dass es einen asynchronen Prozess ausführt und wann dieser Prozess abgeschlossen sein soll (um mit einem anderen Test fortzufahren, den Sie möglicherweise ausführen).

Dies wird erreicht, indem done an den asynchronen Methodenrückruf von Jasmine übergeben und done() aufgerufen wird, wenn der asynchrone Vorgang abgeschlossen ist.

Wenn Sie nicht anrufen done() Jasmine zeigt einen Timeout-Fehler. Ich denke, das sollte dein Problem lösen.

Weitere Informationen hier: Mocking ngResource in Angular unit tests.

Hoffe, das hilft!

Verwandte Themen