如何覆盖量角器的默认超时?

时间:2014-03-06 18:42:31

标签: angularjs protractor

如何在Protractor中覆盖defaultTimeoutIntervalit方法的默认超时(describe)?它默认为2500ms

2 个答案:

答案 0 :(得分:16)

我自己就找到了答案。

config.js

jasmineNodeOpts: {
    defaultTimeoutInterval: 25000
},

答案 1 :(得分:0)

您可以使用以下两个功能覆盖特定的“ it”测试中的默认超时,以覆盖然后恢复默认值:(仅在Chrome中测试)

import { browser } from 'protractor';

export function DefaultTimeoutOverride(milliseconds: number) {
    browser.driver.manage().timeouts().setScriptTimeout(milliseconds);
}

export function DefaultTimeoutRestore() {
    browser.driver.manage().timeouts().setScriptTimeout(browser.allScriptsTimeout);
}

编辑

我现在已经创建了一个帮助器函数('itTO'),该函数包装了Jasmine的'it'语句并自动应用超时:)

import { browser } from 'protractor';

export function itTO(expectation: string, assertion: (done: DoneFn) => void, timeout: number): void {
    it(expectation, AssertionWithTimeout(assertion, timeout), timeout);
}

function AssertionWithTimeout<T extends Function>(fn: T, timeout: number): T {
    return <any>function(...args) {
        DefaultTimeoutOverride(timeout);
        const response = fn(...args);
        DefaultTimeoutRestore();
        return response;
    };
}

function DefaultTimeoutOverride(milliseconds: number) {
    browser.driver.manage().timeouts().setScriptTimeout(milliseconds);
}

function DefaultTimeoutRestore() {
    browser.driver.manage().timeouts().setScriptTimeout(browser.allScriptsTimeout);
}

使用如下:

itTO('should run longer than protractors default', async () => {
        await delay(14000);
}, 15000);

const delay = ms => new Promise(res => setTimeout(res, ms))