2016-10-27 71 views
7

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

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

编辑(赏金之前的说明): 量角器连接到角(1或2),以便在评估任何事情之前等待所有未完成的工作完成。这意味着所有优秀的角度promises或任何活动的角度timer将挂起量角器测试(并最终导致它们失败)。最常见的解决方案是设置browser.ignoreSynchronization = true,但这会迫使我在回调链中嵌套所有e2e测试或使用一堆睡眠。可能都是。因此,看起来我被困在一块岩石和一个艰难的地方,要么有写真e2e测试的实际经验,要么围绕特定的应用代码行设置条件,以便在“测试模式”(eww,丑陋)时不运行。我选择了更容易的e2e测试,因为我期望以数百种方式编写它们,到目前为止,我们只谈到一个在测试期间不重要的间隔(会话刷新间隔为30分钟)。

+1

从全局变量(例如ENV)获取环境非常普遍。 – estus

+0

我对Angular2使用'browser.ignoreSynchronization = true',不必等待模型在更改后解决。当'browser.ignoreSynchronization = true'是一个问题并且迫使你入睡时,你能描述一个样本吗? –

+0

@JuanmiRodriguez每次有异步的事情都完成了。如更改“页面”或通过网络获取数据。 – Hampus

回答

0

一个显而易见的解决方案,我认为是设置窗口对象

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

上一个全局变量在你的测试代码中设置

window.TEST_MODE = true; 
+1

虽然这会起作用,但它基本上只是一个比@estus提出的使用环境变量更肮脏的解决方案,这将是我将努力解决的问题。 在使用e2e测试配置时,有一个配置变量,比如'useSessionRefresh = true'并且它是'false'就行了。此外,这不会使生产代码混乱很多window.TEST_MODE,并且可能本身就是一个有价值的配置。 – Hampus

+0

我同意,我的解决方案只是一个暂时的,如果你很着急 – Raaghu