如何在Cypress的cy.request中更新Cookie至请求头?
问题分析与解决方案
核心问题
- 异步执行顺序错误:Cypress命令是异步的,
cy.getCookie还未完成Cookie获取,cy.request就已执行,导致cookie变量未被正确赋值。 - 语法错误:代码中
then((c) => {=多了一个多余的等号,会导致代码执行失败。 - 不必要的手动Cookie设置:Cypress的
cy.request默认会自动携带当前浏览器上下文的Cookie,通常无需手动在headers里设置Cookie字段。
修正后的代码示例
putCallAdmin(endpoint, requestBody) { cy.getCookie("Cookie") .should("have.property", "value", cookieToken) .then((c) => { // 确保请求在获取到Cookie后执行 cy.request({ method: "PUT", url: endpoint, headers: { "Content-Type": "application/json", // 注意取c.value而非整个c对象,若无需自定义Cookie可直接删除此字段 Cookie: c.value, }, body: requestBody, failOnStatusCode: false, }).then((data) => { this.printLogs(data.body); }); }); }
额外优化建议
- 若无需手动控制Cookie,直接移除headers里的
Cookie字段,cy.request会自动携带当前上下文的Cookie:
putCallAdmin(endpoint, requestBody) { cy.getCookie("Cookie") .should("have.property", "value", cookieToken) .then(() => { cy.request({ method: "PUT", url: endpoint, headers: { "Content-Type": "application/json", }, body: requestBody, failOnStatusCode: false, }).then((data) => { this.printLogs(data.body); }); }); }
- 若需要清除旧Cookie再设置新值,可在
cy.getCookie前添加cy.clearCookies()确保上下文干净:
putCallAdmin(endpoint, requestBody) { cy.clearCookies(); // 清除所有Cookie // 此处可添加cy.setCookie设置新Cookie的逻辑 cy.getCookie("Cookie") .should("have.property", "value", cookieToken) .then((c) => { cy.request({ method: "PUT", url: endpoint, headers: { "Content-Type": "application/json", Cookie: c.value, }, body: requestBody, failOnStatusCode: false, }).then((data) => { this.printLogs(data.body); }); }); }
内容的提问来源于stack exchange,提问作者Vince
相关产品推荐
相关产品推荐

