gpt4 book ai didi

javascript - Cypress - 如何在另一个请求 header 中使用响应正文

转载 作者:行者123 更新时间:2023-11-30 06:18:51 25 4
gpt4 key购买 nike

我有一个函数会返回一个 token

var accessToken;
function TestToken(){
return cy.request({
method: 'POST',
url: "https://site/token",
headers: {
'Content-Type': 'application/json',
},
body: {
client_id: '1234',
client_secret: '1234',
audience: 'https://site/api/v1/',
grant_type: 'credentials'
}
}).then(response => {
return new Cypress.Promise((resolve, reject) => {
const rbody = (response.body);
var tokenPattern = "(?i)\"access_token\":\\s*\"([^\"]*)\"";
const authToken = rbody.access_token;
accessToken = authToken
cy.log(accessToken);
resolve(accessToken);
return accessToken;
})
});

我在另一个 cypress 命令中调用该函数,因为我需要在授权 header 中使用 token

Cypress.Commands.add("ResetPwd", () => {
const authToken = TestToken();
cy.log(authToken);
cy.request({
method: 'POST',
url: "https://site/api/v2/users/1234",
headers: {
'Content-Type': 'application/json',
'authorization': 'Bearer '+authToken,
},
body: {
password: 'Test4321',
connection: 'DB',
}
});
});

当我执行命令时,我没有看到正在使用的 token 。相反,我在请求中看到 "authorization": "Bearer [object Object]"

在 TestToken 函数中,我添加了 cy.log(authToken);,以验证它是否正确获取了 token 。柏树测试失败说

CypressError: cy.then() failed because you are mixing up async and sync code.

但我仍然可以在控制台中看到正确的 token 。

这是我尝试运行的柏树测试

describe('Token Test', function() {
before(() => {
cy.ResetPwd();
})
it('Go to website', function() {
cy.visit('https://site/login')
});
});

最佳答案

functions 是同步的,所以在调用它的那一刻,结果将等于 Promise,promise 是对象,当您尝试将对象字符串化(通过 + 运算符)时,您会得到[对象对象]

一段时间后, promise 将得到解决,authToken 变量中的值将是正确的。

要修复它,建议使用 Cypress.Promise,例如 id cypress docs: https://docs.cypress.io/api/utilities/promise.html#Basic-Promise

关于javascript - Cypress - 如何在另一个请求 header 中使用响应正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54561521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com