javascript - 如何告诉 Protractor 忽略特定的异步 Angular 任务?

标签 javascript angularjs asynchronous protractor event-stream

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

超时时出现以下错误: 失败:WAITING异步 Angular 任务在 300 秒后完成时超时。这可能是因为当前页面不是 Angular 应用程序。更多详情请参阅常见问题解答:https://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting-for-angular 。 以下任务待处理: - $http: https://example.com/custom/xxx/sse

谁能帮我解决这个问题吗?

最佳答案

在 Protractor 中,您可以添加模拟。 因此,实际上您可以做的是添加一些模拟模块来模拟您需要的任何内容。

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

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

这是一篇关于 Protractor 中的模拟的好文章:

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 内的方法.

希望对你有帮助

关于javascript - 如何告诉 Protractor 忽略特定的异步 Angular 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44377469/

相关文章:

javascript - 使用 getter 和 setter 使用两个变量分配一个值

javascript - 向 javascript 数组元素添加属性

javascript - 如何将 Angular 的 ui-sref 插入链接文本中?

javascript - Javascript 中的位调整

javascript - 工具提示(qTip)未关闭,jQuery

javascript - 单击外部区域时,AngularJS 试图隐藏弹出菜单

angularjs - 如何自定义设置angularjs jsonp回调名称?

c# - Task.Delay(0) 不是异步的

php - 如何编写在后台运行的异步 web 服务 php

c# - 如何异步检索多个网站?