【问题标题】:How to tell protractor to ignore specific asynchronous Angular tasks?如何告诉量角器忽略特定的异步 Angular 任务?
【发布时间】:2021-03-26 17:54:22
【问题描述】:

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

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

谁能帮我解决这个问题?

【问题讨论】:

    标签: javascript angularjs asynchronous protractor event-stream


    【解决方案1】:

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

    如果问题仅与异步请求计时超时有关,您还可以从 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!");
      })
    })
    

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

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      感谢@quirimmo 的宝贵回复。

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

      【讨论】:

        猜你喜欢
        • 2013-06-28
        • 2011-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-22
        • 2015-12-19
        • 2017-11-12
        • 1970-01-01
        相关资源
        最近更新 更多