web-dev-qa-db-fra.com

Cypress: comment obtenir la valeur retournée à partir de commandes personnalisées? (Cypress-promesse)

Je cherche un moyen de récupérer une valeur de retour retournée par une commande Cypress personnalisée.

J'utilise actuellement Cypress et Cypress-promise lib ( https://www.npmjs.com/package/cypress-promise )

Actuellement, le résultat est que: log1 = CAR 1 log2 = null

Où est mon erreur?

Fichier de test:

it('Test 1', async function() {
     const carName = await promisify(cy.set_typeCarName());
     cy.log("log2 = " + carName );
});

module:

set_typeCarName() {
     let carName = "CAR 1";
     cy.get('#newSiteCityInput').type(carName);
     cy.log("log1 = " + carName);
     return carName;
};

Cypress.Commands.add('set_typeCarName',() => {
    webnewsite.set_typeCarName();
});
3
wawanopoulos

La commande manque-t-elle une instruction return?

Cypress.Commands.add('set_typeCarName',() => {
  return webnewsite.set_typeCarName(); // I added the initial `return`
});
0
NoriSte

Cypress introduit une nouvelle façon d'écrire du code au lieu de renvoyer des valeurs, c'est-à-dire en utilisant un alias. https://docs.cypress.io/guides/core-concepts/variables-and-aliases.html#Closures

Manière normale d'écrire du code

async function compute(){
const value = await (asynchronous function);
return value;
}

const x = await compute(); // #a
console.log(x);            // #b

Comment faire est dans Cypress, car nous ne pouvons pas utiliser async/wait dans cypress

function() compute{
  cy.get('p#text').then(p => {
    const text = p.textContent;
    cy.wrap(text).as('pText');
    //even if we return text from here, it will not be accessible anywhere

  });
}

compute();    // #a
cy.get('@pText').then(text => {
  console.log(text);  // #b
}

Le nœud est d'alias la valeur puis de l'utiliser dans la commande suivante

car

Cypress passe d'abord par tout le code et met les commandes en file d'attente
une fois que le code est dans la file d'attente, la prochaine commande dans la file d'attente ne s'exécutera qu'une fois tous les rappels de la commande actuelle terminés, nous pouvons donc utiliser le modèle de code ci-dessus.

0
Akshay Vijay Jain