2013-06-19 54 views
4

在我的应用程序中,我有一个$超时,每分钟触发并安排另一个$超时。正因为如此,我的e2e测试等待$超时并且根本不想工作。据我所知,没有办法说业力不等待某些$超时。但是有没有一种方法可以检测代码是否在业务环境中运行,并且根本不运行这个$ timeout?

回答

-2

从AngularJS docs

In tests you can use $timeout.flush() to synchronously flush the queue of deferred functions.

如果您调用许多$超时,您可以使用waitsFor茉莉功能。事情是这样的:

waitsFor(function() { 
    $timeout.flush(); 

    return workedThreeTimes(); 
}, 'should run something per minute', 1000 * 60 * 3); 

(对不起,我的英语)

+0

是否有可能在e2e测试中注入某些东西? –

+0

是的,你可以使用inject()函数: 它('should inect something',inject(function($ timeout){ expect($ timeout).toBeDefined(); })); 此外,您还需要使用anguar-mocks.js –

+0

谢谢。顺便说一下,你有jasmine.js和angular-mocks.js e2e的一些稳定的karma-runner配置示例。我花了几个小时试图组合它,但仍然有不同的错误消息。例如“TypeError:无法读取null的属性'waitsFor'”如果我尝试刷新$ timeout在waitsFor块 –

0

我没有找到任何优雅的解决方案。现在我决定在URL中传递一个标志,解析它并根据这个标志禁用这个特殊的$ timeout。这种解决方案看起来不太好,但它工作。我希望稍后角将有这种类型的东西的某种e2e dsl命令。