web-dev-qa-db-fra.com

afficher la sortie console.log dans angular jasmin du rapporteur

Comment puis-je afficher la sortie console.log dans un test de jasmin angularjs rapporteur? Pour l'instant, le navigateur se ferme trop rapidement.

plus d'informations - Je travaille avec le tutoriel angularjs, étape 8. J'essaie de changer le test e2e en rapporteur. Le fichier de configuration du rapporteur que j'utilise est basé sur% appdata%\npm\node_modules\protractor\referenceConf.js. Dans les fichiers spec js référencés par le fichier de configuration, j'ai des instances de console.log. Cependant, lors de l'exécution du test du rapporteur e2e, le site Web s'ouvre en chrome, je vois des choses se produire dans le navigateur, puis le navigateur se ferme avant que je puisse examiner n'importe quelle sortie de console.log. Je pense que je dois garder chrome ouvert en quelque sorte. Comment?

39
Bill Swartz

Utilisez browser.manage().logs().get('browser')

browser.manage().logs().get('browser').then(function(browserLogs) {
   // browserLogs is an array of objects with level and message fields
   browserLogs.forEach(function(log){
      if (log.level.value > 900) { // it's an error log
        console.log('Browser console error!');
        console.log(log.message);
      }
   });
});
40
Mohsen

Une idée fausse générale est que console.log Enregistrera les choses dans votre navigateur. C'est incorrect. Lorsque vous exécutez vos tests, ainsi que les résultats des tests, vous devriez voir les valeurs console.log() également dans le terminal. La console du navigateur est complètement différente de cela.

Un exemple général:

it('get name as John', function(){
        element(by.id('name')).getText().then(function(value){
        console.log(value);
    })
});

Résultats dans le terminal:

John
get name as John - pass

J'espère que ça aide.

8
Sandy

Cela peut maintenant être réalisé sans écrire de code spécial et via des plugins:

6
alecxe

Afin de garder la fenêtre du navigateur ouverte, vous devriez essayer d'exécuter Protractor en mode débogage:

$ <route-to-protractor> debug <route-to-conf-file>

Ensuite, dans votre fichier de spécifications, ajoutez cette ligne à l'endroit où vous souhaitez que l'exécution s'arrête:

browser.debugger();

Dans la console du débogueur Protractor, vous pouvez passer les arrêts en tapant c ou cont.

Plus d'informations ici: https://github.com/angular/protractor/blob/master/docs/debugging.md

Maintenant, afin d'obtenir le contenu de la console, vous pouvez vérifier comment le faire dans la FAQ Protractor: https://github.com/angular/protractor/blob/master/docs/faq.md#how-can- i-get-hold-of-the-browser-console

Quelque chose comme:

browser.manage().logs().get('browser').then(function(browserLog) {
  console.log('log: ' + require('util').inspect(browserLog));
})
5
pacog

Une option simple consiste à utiliser:

browser.pause();rapporteur/api/browser.pause

par exemple:

it('should .. test stuff', function() {
    browser.pause(); //--->the automation will pause here - follow the instructions in your terminal to continue 
    //--->your broken testing magic here...
});

Placez cet appel de méthode en tant que premier élément du corps de spécification où vous devez afficher la console des navigateurs.

Après la pause du navigateur, vous aurez le contrôle de l'automatisation. Vous pouvez ensuite interagir avec le navigateur comme d'habitude, inspecter les éléments à différents états, vérifier la console des navigateurs, etc.

Continuez les tests en entrant c pour continuer dans votre terminal - il y aura une invite avec des instructions en attente de votre entrée.

2
mcgraw

Vous pouvez également modifier le niveau de journalisation pour afficher d'autres types de sorties de console.

Voir ma proposition de mise à jour de la FAQ du rapporteur pour le faire ici

2
user1337489

Vous pouvez toujours simplement remplacer console.log dans votre test :)

logMessages = [];

console.log = function(message) {
    logMessages.Push(message);
}

Vous pouvez également utiliser $ log au lieu de console.log et utiliser une solution comme celle-ci pour mettre des crochets dans les messages de journal: https://Gist.github.com/lrvick/6938531

1
rob