Remplacer
console.log("global user", this.user);
avec
cy.log(this.user);
et cela devrait fonctionner comme prévu.
La raison en est la nature asynchrone des commandes cypress. Voyez cela comme un processus en deux étapes : Toutes les commandes cypress ne font pas ce que vous pensez, quand elles sont exécutées. Elles construisent simplement une chaîne de commandes. Cette chaîne est exécutée comme le test plus tard.
Ce n'est évidemment pas le cas pour d'autres commandes telles que console.log()
. Cette commande est exécutée lors de la préparation du test.
C'est expliqué en détail dans la documentation sur le cyprès :
Mais j'ai eu beaucoup de mal à m'y retrouver. Il faut s'y habituer. Une règle de base : Presque toutes les commandes de votre test doivent être des commandes Cypress.
Il suffit donc d'utiliser cy.log
au lieu de console.log
Si vous devez utiliser console.log, vous pouvez le faire comme suit :
cy.visit("/).then(() => console.log(this.user))
de cette façon, le console.log
est enchaîné. Ou si vous n'avez pas de sujet à enchaîner, construisez votre propre commande personnalisée comme ceci :
Cypress.Commands.add("console", (message) => console.log(message))
cy.console(this.user)
Une autre erreur dans l'utilisation de this
à Cypress utilise des fonctions de flèche. Si c'est le cas, vous n'avez pas accès à la fonction this
que vous attendez. Voir En évitant l'utilisation de ce dans la documentation sur le cyprès.
0 votes
Cela ne semble pas correct (ni la réponse de @RichardMatsen). Pouvez-vous poster un exemple où exactement le
this.user
est indéfini dans les tests suivants ?