如何告诉量角器忽略特定的异步Angular任务?

时间:2017-06-05 20:50:28

标签: javascript angularjs asynchronous protractor event-stream

我的angularJS应用程序使用事件流,它保持打开http事件 - 蒸汽请求和侦听服务器事件。所以我的问题是当量角器开始测试我的angularJS应用程序时,它会一直等待完成事件流请求,因为我使用的是ignoreSynchronization = false所以量角器会等到它超时,因为事件流http请求永远不会完成。所以我想教我的量角器忽略这样的事件流$ http任务并继续测试我的应用程序。 这些事件流在我的应用程序中实现,因此每次有事件流请求,然后量角器就会超时。

我超时时收到以下错误: 失败:超时等待异步角度任务在300秒后完成。这可能是因为当前页面不是Angular应用程序。有关详细信息,请参阅常见问题解答:https://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting-for-angular。       以下任务尚未完成:         - $ http:https://example.com/custom/xxx/sse

任何人都可以帮我摆脱这个问题吗?

2 个答案:

答案 0 :(得分:3)

在量角器中,您可以添加模拟。 所以你实际上可以做的是添加一些模拟模块来模拟你需要的任何东西。

如果问题只与异步请求计时的超时有关,您也可以从protractor.config.js更改该超时值,增加它。

顺便说一下,回到模拟中,你可以通过browser.addMockModule方法定义模拟并将它们添加到量角器中。

这是一篇关于量角器中的模拟的好文章:

http://eitanp461.blogspot.ie/2014/01/advanced-protractor-features.html

这里有一个很好的npm模块,以方便你模拟angularjs $ http请求:

https://github.com/atecarlos/protractor-http-mock

这可能是模拟模块的一个小例子而不使用上面的节点模块:

browser.addMockModule('httpMocker', function() {
  angular.module('httpMocker', ['ngMockE2E'])
  .run(function($httpBackend) {
    $httpBackend.whenGET('MYURL')
    .respond("MOCKED RESPONSE!");
  })
})

您也可以直接在测试中定义模拟,但如果您想在测试中全局定义模拟,我建议您在onPrepare内的protractor.config.js方法内直接定义模拟。

我希望它有所帮助

答案 1 :(得分:0)

感谢@quirimmo的宝贵回应。

我们可以在不使用模拟后端调用的情况下实现超时问题,只需修改http请求并将超时设置为http请求,以便量角器等待直到我们已经设置的请求超时(超时将关闭长时间运行的http请求)并进一步执行语句。