1

我正在与实习生一起编写一些功能测试,并遇到了以下文本部分...

“如果在测试超时(默认为 30 秒;设置 this.timeout 以更改值)内未履行承诺,测试也会失败。”

在...

https://github.com/theintern/intern/wiki/Writing-Tests-with-Intern#asynchronous-testing

如何设置功能测试的承诺超时?我试过直接在 promise 上调用 timeout() ,但这不是一个有效的方法。

我已经设置了各种 WD 超时(页面加载超时、隐式等待等),但我遇到了 promise 超时的问题。

4

5 回答 5

1

通过建议的 API 在我的测试中设置超时不起作用。它远非理想,但我最终直接修改了 Test.js,并在我想要的超时时间内进行了硬编码。在查看源代码时,我确实注意到有一条关于超时代码的评论,说类似 // TODO timeouts not working wrong yet

于 2014-09-29T10:50:08.153 回答
1

在最新版本上似乎可以正常工作:

define([
    'intern!object',
    'intern/chai!assert',
    'require',
    'intern/dojo/node!leadfoot/helpers/pollUntil'
], function (registerSuite, assert, require, pollUntil) {
    registerSuite(function(){
        return {
            name: 'index',

            setup: function() {         
            },

            'Test timeout': function () {           
                this.timeout = 90000;
                return this.remote.sleep(45000);
            }
        }
    });
});
于 2015-04-10T18:55:11.180 回答
1

您还可以添加defaultTimeout: 90000到您的配置文件(tests/intern.js在默认教程代码库中)以全局设置超时。这对我很有效。

于 2016-05-17T12:20:42.350 回答
0

通过将超时作为第一个参数传递给this.async,或者通过设置this.timeout(它是属性,而不是方法)来设置测试的超时。

于 2014-04-13T18:13:54.867 回答
0

对于任何在使用 InternJS 4 并利用async/await进行功能测试时在这里找到自己的方式的人:这对我不起作用,但下面的模式可以timeoutexecuteAsync基本上我只是执行了一些逻辑,并sleep以比setTimeout. 请记住,其中的javascript运行execute是块范围的,因此您需要缓存以后要在window对象上引用的任何内容。希望这可以节省其他人一些时间和挫败感......

test(`timer test`, async ({remote}) => {
    await remote.execute(`
        // run setup logic, keep in mind this is scoped and if you want to reference anything it should be window scoped
        window.val = "foo";
        window.setTimeout(function(){
            window.val = "bar";
        }, 50);
        return true;
    `);
    await remote.sleep(51); // remote will chill for 51 ms
    let data = await remote.execute(`
        // now you can call the reference and the timeout has run
        return window.val;
    `);
    assert.strictEqual(
      data,
      'bar',
      `remote.sleep(51) should wait until the setTimeout has run, converting window.val from "foo" to "bar"`
    );
});
于 2019-04-30T21:09:34.147 回答