【问题标题】:Executing cy.request in a for-loop在 for 循环中执行 cy.request
【发布时间】:2021-11-08 15:18:26
【问题描述】:

我正在尝试编写代码,让用户指定通过赛普拉斯创建的项目数量(我们的某些测试需要这种灵活性)。

function createSomeItems(itemCount, headers)
{
    item: { id: 0, field1: 123, field2: "test text!"};
    let chain;
    for (let i = 0; i < itemCount; i++)
    {
        chain = cy.request({method: 'POST', url: '/create-item', body: item, headers: headers});
        item.id += 1;
    }
    return chain;
}

问题是应用程序遇到错误,因为项目的 ID 重复。据我所知,对cy.request 的调用实际上并没有在我认为执行时执行。

我对 Cypress 还是很陌生(这是我 15 年来第一次使用 JavaScript),所以我不知道如何解决这个问题。

我知道我可以将 n 个对 cy.request().then()... 的调用显式链接在一起,但这会使测试变得庞大且难以阅读(尤其是对于需要较大 n 值的测试用例) ),我正在努力保持代码整洁紧凑。

【问题讨论】:

标签: javascript cypress


【解决方案1】:

对于任何好奇的人,我想出了一个返回命令链的解决方案(不像example from Cypress):

function createSomeItems(itemCount, headers)
{
    let item = { id: 0, field1: 123, field2: "test text!"};

    function recursiveRequester(itemNumber, chain)
    {
        item.my_id = itemNumber;

        return chain.then(() => {
            return cy.request({method: 'POST', url: '/create-item', body: item, headers: headers});
                .then(() => {
                    if (itemNumber === itemCount) {
                        return chain;
                    }
                    else {
                        return recursiveRequester(itemNumber + 1, chain);
                    }
                })
        })
    }

    
    return recursiveRequester(1, functionThatDoesOtherSetupwork());

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-26
    • 2013-02-12
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多