Angularjs 使用量角器测试加载文本

Angularjs 使用量角器测试加载文本,angularjs,protractor,angularjs-e2e,Angularjs,Protractor,Angularjs E2e,在我的angularjs应用程序中,我需要从远程获取一些数据,在此期间,我在页面上显示了“加载数据…”文本 页面基本上是这样的: <div ng-show="remoteData"> {{remoteData}} </div> <div id="loading" ng-hide="remoteData"> Loading data, wait ... </div> 但是我怎样才能用它来测试呢 由于我们在e2e测试中使用本地服务器中提供

在我的angularjs应用程序中,我需要从远程获取一些数据,在此期间,我在页面上显示了“加载数据…”文本

页面基本上是这样的:

<div ng-show="remoteData">
   {{remoteData}}
</div>
<div id="loading" ng-hide="remoteData">
   Loading data, wait ...
</div>
但是我怎样才能用它来测试呢

由于我们在e2e测试中使用本地服务器中提供的模拟文件,
$http.get(…)
部分将运行得非常快,当我尝试检查“loading”div时,它总是隐藏的,因为数据已经加载


如果有什么方法可以测试它?

在我的应用程序中,我决定实施以下方案:

  • 后端在开发模式下运行时,会添加一个额外的中间件,用于查看cookie头的值
  • 如果名为
    \uuu km\u delay
    的cookie标头存在,则它包含一个延迟设置为毫秒的数字。此中间件将在处理对下一个中间件的控制之前休眠给定的时间
同时,我使用以下量角器:

browser.manage().addCookie('__km_delay', millis, '/')
当我完成测试时,我调用:

browser.manage().deleteCookie('__km_delay')
这样做的优点是不必以任何方式修改Angular app逻辑以进行测试

如果您想知道为什么我选择cookie而不是另一个HTTP头,是因为我找不到使用量角器设置额外头的方法。cookie是一个头;)


顺便说一句,我使用类似的方法来测试5xx服务器响应。

我使用了您的解决方案,但是发现,使用
browser.get(url)
,无论我将服务器设置为等待多长时间,它都会在持久性测试中获得最终加载的页面,在检查时加载文本总是隐藏的。如何测试它?哦,是的,看看
browser.ignoreSynchronization
。另外,我忘了提到在IE9中设置cookie是不起作用的:/I我使用
browser.driver.get(…)
,而且效果很好<代码>浏览器。驱动程序不会等待angularjs初始化
browser.manage().deleteCookie('__km_delay')