如何告诉量角器忽略特定的异步 Angular 任务?
How to tell protractor to ignore specific asynchronous Angular tasks?
我的 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
谁能帮我解决这个问题?
在量角器中,您可以添加模拟。
所以实际上你可以做的是添加一些模拟模块来模拟你需要的任何东西。
如果问题只是与异步请求计时的超时有关,您还可以更改 protractor.config.js
的超时值,增加它。
顺便说一句,回到模拟,您定义模拟并通过 browser.addMockModule
方法将它们添加到量角器中。
这里有一篇关于量角器模拟的好文章:
http://eitanp461.blogspot.ie/2014/01/advanced-protractor-features.html
这里有一个很好的 npm 模块,方便你 mocking angularjs $http requests:
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
方法中定义模拟。
希望对你有帮助
感谢@quirimmo 的宝贵回复。
我们可以在不使用模拟后端调用的情况下解决超时问题,只需修改 http 请求并将超时设置为 http 请求,这样 protractor 就会等待我们已经设置的请求超时(超时将关闭 long 运行 http 请求)并执行进一步的语句。
我的 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
谁能帮我解决这个问题?
在量角器中,您可以添加模拟。 所以实际上你可以做的是添加一些模拟模块来模拟你需要的任何东西。
如果问题只是与异步请求计时的超时有关,您还可以更改 protractor.config.js
的超时值,增加它。
顺便说一句,回到模拟,您定义模拟并通过 browser.addMockModule
方法将它们添加到量角器中。
这里有一篇关于量角器模拟的好文章:
http://eitanp461.blogspot.ie/2014/01/advanced-protractor-features.html
这里有一个很好的 npm 模块,方便你 mocking angularjs $http requests:
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
方法中定义模拟。
希望对你有帮助
感谢@quirimmo 的宝贵回复。
我们可以在不使用模拟后端调用的情况下解决超时问题,只需修改 http 请求并将超时设置为 http 请求,这样 protractor 就会等待我们已经设置的请求超时(超时将关闭 long 运行 http 请求)并执行进一步的语句。