web-dev-qa-db-fra.com

Cypress pipe console.log et journal des commandes pour sortir

Est-il possible de rediriger ou de capturer le journal du navigateur Cypress et le journal des commandes vers la sortie?

J'ai lu quelques github Cypress issues sur ce sujet. Mais je ne sais pas comment le faire fonctionner.

Fondamentalement, je veux capturer tous les journaux de commande de l'interface graphique Cypress dans le mode sans interface graphique sans tête. Si je peux inclure le journal de la console du navigateur, ce sera encore mieux. Le but est de comprendre ce qui s'est passé lorsqu'un test échoue.

J'utilise teamcity comme ci. Voici un exemple de mon journal de build. Je veux voir tout le journal des commandes ici aussi. En fait, tout console.log exécuté côté serveur à l'aide de cy.task Est affiché dans le journal de génération. L'exécution de cy.task('log',message) est trop manuelle. Des moyens plus intelligents?

[09:49:08][Step 1/1] 2 of 4: new actions (52s)
[09:50:00][Step 1/1] 3 of 4: new actions (52s)
[09:50:53][Step 1/1] 4 of 4: new actions (53s)
[09:51:47][Step 1/1]   (Results)
[09:51:47][Step 1/1] 
[09:51:47][Step 1/1]   ┌─────────────────────────────────────┐
[09:51:47][Step 1/1]   │ Tests:        8                     │
[09:51:47][Step 1/1]   │ Passing:      8                     │
[09:51:47][Step 1/1]   │ Failing:      0                     │
[09:51:47][Step 1/1]   │ Pending:      0                     │
[09:51:47][Step 1/1]   │ Skipped:      0                     │
[09:51:47][Step 1/1]   │ Screenshots:  0                     │
[09:51:47][Step 1/1]   │ Video:        true                  │
[09:51:47][Step 1/1]   │ Duration:     3 minutes, 38 seconds │
[09:51:47][Step 1/1]   │ Estimated:    1 minute, 8 seconds   │
[09:51:47][Step 1/1]   │ Spec Ran:     action/action_spec.js │
[09:51:47][Step 1/1]   └─────────────────────────────────────┘
8
Jake He

À partir de Cypress 3.0.0, vous pouvez utiliser cy.task() pour accéder directement au nœud et sortir vers la console du nœud. De la documentation:

// in test
cy.task('log', 'This will be output to the terminal')
// in plugins file
on('task', {
  log (message) {
    console.log(message)
    return null
  }
})

Voir ici pour plus d'informations.

Je ne connais pas de moyen de refléter directement les journaux Cypress sur la console, mais c'est au moins une alternative viable.

16
Joshua Wade

En développant la réponse de @ Joshua-wade, vous pouvez remplacer cy.log Pour rediriger tous les appels vers la tâche de journal. Tout comme ce qui suit:

Cypress.Commands.overwrite('log', (subject, message) => cy.task('log', message));

Remarque: il y a un petit inconvénient à cela: lorsque vous exécutez le test à l'aide de Test Runner, au lieu de voir LOG my message Dans le journal des commandes, vous verrez TASK log, my message. Mais à mon humble avis, c'est négligeable.

0
Arnon Axelrod