我有一个Angular网络应用程序,通过长时间轮询持续监听来自后端的通知:
scope.notification = $resource('/notification').get();
此请求永远不会在测试环境中完成。对于Protractor来说这是一个问题,因为它希望等待所有未完成的HTTP请求完成。
我看到了许多潜在的解决方案,但是它们都存在一些问题。
我没有看到告诉Protractor忽略此请求的方法。从$interval
发出它(它本身被忽略)不是解决方案。量角器不会等待发送请求,但一旦发送,它仍将等待它完成。
所以我试图在运行测试时不发送此请求。但我怎么知道我参加考试?
?protractor=true
)。但我的网络应用程序一直在修改URL,因此可以快速清除。browser.executeScript('window.runningProtractorTests = true;');
但似乎Protractor会在运行executeScript
之前等待页面先同步。我在页面加载时立即发送请求。Protractor
),因为担心我的库可能依赖于解释用户代理字符串,因此我必须弄清楚正确的字符串。 有没有直接的方法来做到这一点?
答案 0 :(得分:4)
您是否可以将$resource
的来电置于使用量角器browser.addMockModule()
嘲笑的服务中?这样,Protractor将在它有机会运行之前始终覆盖原始服务。
这看起来像
// in your application
myModule.service('myNotificationService', function($resource) {
this.notification = $resource('/notification').get();
});
// In your Protractor test
browser.addMockModule('notificatonOverride', function() {
angular.module('notificationOverride').service('myNotificationService', function() {
this.notification = {}; // or whatever you need here.
});
});
答案 1 :(得分:1)
尝试使用browser.driver.get('http://myapp')
加载视图。直接调用webdriver api不会等待角度准备就绪。
然后你可以运行脚本。
browser.driver.executeScript('window.runningProtractorTests = true;');
然后继续使用量角器api。
您可能需要添加browser.waitForAngular()以确保在进行测试之前已准备好角度。