如何检测angular2 Web应用程序处于测试模式

时间:2016-10-27 09:41:55

标签: angular protractor e2e-testing

如何在angular2运行时检测到我在e2e测试模式下运行?我有一个会话刷新间隔,我不想在测试模式下设置,以避免与量角器同步问题。

一个明显的答案是寻找一个URL参数。有没有那么脏的解决方案?

编辑(赏金前的澄清): 量角器连接到角度(1或2),以便在评估任何东西之前等待所有未完成的工作完成。这意味着所有未完成的角度promises或任何活动的角度timer都会挂起量角器测试(并最终导致它们失败)。最常提出的解决方案是设置browser.ignoreSynchronization = true,但这会迫使我在回调链中嵌套所有e2e测试或使用一堆睡眠。可能两者都有。因此,我似乎陷入了摇滚和困难的地方之间,要么在编写e2e测试时遇到真正的艰难经历,要么在特定应用程序代码行周围设置条件,以便在测试模式" (呃,丑陋的)。我选择更简单的e2e测试,因为我希望将它们写成数百个,到目前为止我们只讨论一个在测试期间不重要的时间间隔(会话刷新时间间隔为30分钟)。

2 个答案:

答案 0 :(得分:1)

您可以通过

开始在angulars区域之外的超时/间隔
ngZone.runOutsideAngular(() => {
  // start your timeout/interval here
});

这将避免量角器等待超时/间隔完成。有关详细信息,请参阅:https://github.com/angular/protractor/issues/3349

答案 1 :(得分:0)

我认为一个明显的解决方案是在窗口对象上设置全局变量

if(window.TEST_MODE){
   // run code that needs to be run during test
}

在您的测试代码集中

window.TEST_MODE = true;