在 for 循环中执行 cy.request

Executing cy.request in a for-loop

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

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),所以我不确定如何解决这个问题。

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

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

}