首页 > 解决方案 > 在 for 循环中执行 cy.request

问题描述

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

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当我认为它确实执行时,调用实际上并没有执行。

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

我知道我可以将n调用cy.request().then()...显式链接在一起,尽管这会使测试变得庞大且难以阅读(特别是对于需要较大n值的测试用例),并且我试图保持代码简洁紧凑。

标签: javascriptcypress

解决方案


对于任何好奇的人,我想出了一个返回命令链的解决方案(与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());

}

推荐阅读