Cypress cy.request 响应存储在记录类型打字稿中

问题描述 投票:0回答:1

我正在进行一些 Cypress 测试,我需要通过 api 调用向数据库添加一些信息。但我需要将响应中的所有 ID 传递给 Cypress 内的另一个请求,但我需要在 for 循环之外执行此操作,因为我不想每次有信息时都发出请求。我创建了一个记录类型并在 .then 中添加了一个值,但它仍然是未定义的。 SubmitRequest 调用中的参数未定义。以前有人遇到过这个吗?我无法在 cy.request then 主体中调用 SubmitRequest 方法,因为它必须位于 for 循环之外。下面是代码

    let idsWithValue: Record<string, commonType.Information>;
    
    for (let index in information) {
        //Create the request
        const requestBody = {
            name: `information.Name`,
            description: `information.Description`
        }


        //Send request for elements
        const options = {
            method: 'POST',
            url,
            body: requestBody,
            headers: coApi.getRequestHeaders()
        }

        cy.request(options).then((response) => {
            expect(response.status).to.eq(200);
            const informationId: string = response.body;
            //After we get the informationId from server add it to a list to pass to another request method
            idsWithValue[informationId] =information[index];
           
        })
    }

    //Submit  request (idsWithValueis undefined here) this has to be outside for loop
    submitRequest(idsWithValue);```

typescript command cypress
1个回答
0
投票

您应该能够通过确保仅在循环中的所有

submitRequest()
完成后才调用
cy.request()
来修复此问题。

尝试将调用包装在

cy.then()
中,如果不运行测试,我不能 100% 确定,但通常 Cypress 不会执行命令,直到所有先前的命令都完成为止,

const idsWithValue = [];
for (...) {
  cy.request(...).then(response => {
    idsWithValue[...] = ...
  })
}

cy.then(() => {
  submitRequest(idsWithValue)
})
© www.soinside.com 2019 - 2024. All rights reserved.