web-dev-qa-db-fra.com

Vérifiez si une erreur a été écrite dans la console

J'essaie de trouver un moyen de vérifier si une erreur a été écrite sur la console lors de l'exécution d'un test unitaire de cyprès.

Je sais comment enregistrer quelque chose sur la console

cy.log('log this to the console');

mais pas comment vérifier si une erreur y a été écrite.

des suggestions sur la façon de lire les erreurs du journal de la console (du navigateur)?

note: probablement pas la manière "intelligente" de tester mais parfois mes bibliothèques js que j'utilise "se plaignent" et écrivent les erreurs dans le journal du navigateur. c'est pour simplifier les tests.

7
udo

Edit: ce qui suit ne le fait pas se connecte directement au terminal en mode sans tête, mais il échoue néanmoins au test sur les AUT console.error Et affiche le message d'erreur indirectement, même dans le terminal sans tête, qui peut être ce que vous voulez.

Je ne sais pas exactement ce que vous voulez dire, mais passons en revue tous les endroits où une sortie peut être enregistrée dans Cypress et comment gérer plusieurs cas.

Tout d'abord, un aperçu:

enter image description here

  1. Pour vous connecter au journal de commandes , vous utilisez:

    // from inside your test
    cy.log('foo');
    
  2. Pour vous connecter à console devTools :

    // from inside your test
    console.log('bar');
    
  3. Pour vous connecter au terminal , vous devez vous connecter à partir du processus de nœud de Cypress:

    // from within e.g. your plugin/index.js file
    console.log('baz');
    

Comment enregistrer les erreurs d'AUT dans le terminal, le journal des commandes et échouer au test

(notez qu'AUT signifie ici Application en cours de test , c'est-à-dire votre application).

J'utilise également ansicolor package pour rendre l'erreur rouge dans le terminal, ce qui est facultatif.

// plugins/index.js
const ansi = require(`ansicolor`);
module.exports = ( on ) => {
    on(`task`, {
        error ( message ) {
            // write the error in red color
            console.error( ansi.red(message) );
            // play `beep` sound for extra purchase
            process.stdout.write(`\u0007`);
            return null;
        }
    });
};

Remarque: en utilisant la commande interne cy.now() pour contourner la tendance de Cypress à lancer Cypress detected that you returned a promise Alors que (IMO) ne devrait pas.

(adapté de https://github.com/cypress-io/cypress/issues/300#issuecomment-438176246 )

// support/index.js or your test file
Cypress.on(`window:before:load`, win => {

    cy.stub( win.console, `error`, msg => {
        // log to Terminal
        cy.now(`task`, `error`, msg );
        // log to Command Log & fail the test
        throw new Error( msg );
    });
});
8
dwelle

Actuellement, il n'y a pas de moyen simple de faire ce que vous demandez, mais il y a eu de bonnes discussions sur la meilleure façon d'obtenir ces informations. J'ai copié une solution ici, mais si vous suivez le lien github, vous pouvez voir d'autres solutions proposées.

Cet extrait a été extrait du problème github trouvé ici: https://github.com/cypress-io/cypress/issues/3

Pour info, la seule solution simple consiste à espionner les fonctions de la console. cy.window().then((win) => { cy.spy(win.console, "log") })

Cela affichera un journal des commandes à chaque appel de cette fonction, et vous pourrez également affirmer ce qui a été enregistré.

Une autre option, selon la raison pour laquelle vous voulez affirmer que quelque chose s'est mal passé, est d'imprimer l'erreur sous les tests en mode sans tête. Le VP de l'ingénierie a créé un package NPM qui le fait pour vous.

Cypress-failed-log

3
Phillipe Bojorquez