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

How to detect angular2 web application is in test mode

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

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

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

我认为一个明显的解决方案是在 window 对象

上设置一个全局变量
if(window.TEST_MODE){
   // run code that needs to be run during test
}

在你的测试代码集中

window.TEST_MODE = true;

您可以通过

在角度区域外开始您的timeouts/intervals
ngZone.runOutsideAngular(() => {
  // start your timeout/interval here
});

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