2016-09-27 188 views
7

我有在本地运行正常的Protractor测试(directConnect:true),但是当我尝试在远程Selenium服务器(网格)上运行它们时,我总是得到以下信息。在远程硒服务器上运行量角器测试时Jasmine spec超时

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

望着失败,消息和堆栈显示我的所有测试用例如下:

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) 

我已经尝试了一些东西,如增加茉莉超时间隔,增加早期的超时,如getPageTimeout和allScriptsTimeout到conf,但它仍然会引发茉莉花超时错误。该日志显示了以下错误:

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]]) 

我肯定知道我的应用程序的角度,它在本地运行时成功运行。我试过设置

browser.ignoreSynchronization = true 

,以及设置

rootElement='html#ng-app' 
在conf

(BC我的NG-应用程序是不是身体,而是在html标签内)。虽然我尝试过'jasmine2',但框架设置为'茉莉',但两者似乎都没有什么区别。在远程服务器上,我能够启动Firefox,UI显示启动的Firefox会话。然而,它只是在那里超时发生。任何输入将不胜感激!

回答

2

Jasmine需要知道它正在运行一个异步进程,并且该进程应该完成(以便继续进行可能正在运行的任何其他测试)。

这是通过将done传递给Jasmine异步方法回调并在解析异步操作时调用done()而获得的。

如果您不打电话done() Jasmine会显示超时错误。我认为这应该可以解决你的问题。

更多的信息在这里: Mocking ngResource in Angular unit tests

希望这会有所帮助!

相关问题