J'ai une fonction qui renvoie un jeton
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;
})
});
J'appelle cette fonction dans une autre commande Cypress, car j'ai besoin d'utiliser le jeton dans l'en-tête d'autorisation.
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',
}
});
});
Lorsque j'exécute la commande, je ne vois pas le jeton utilisé. Au lieu de cela, je vois "authorization": "Bearer [object Object]"
dans la demande.
Dans la fonction TestToken, j'ai ajouté cy.log(authToken);
pour vérifier qu'il a bien saisi le jeton. Le test cypress a échoué en disant
CypressError : cy.then() a échoué parce que vous mélangez le code asynchrone et le code synchrone. sync.
mais je pouvais toujours voir le bon jeton dans la console.
Voici le test cypress que j'essaie d'exécuter
describe('Token Test', function() {
before(() => {
cy.ResetPwd();
})
it('Go to website', function() {
cy.visit('https://site/login')
});
});