2017-12-06 6 views
0

verwenden Ich mache Integrationstests mit Nightwatch. Einige UI-Automatisierung, die gut funktioniert. Am Ende möchte ich überprüfen, ob eine Rest-API verwendet wird, wenn die Ergebnisse der UI-Operationen korrekt sind. Ich versuche dort Chai zu benutzen, da Chai in Nightwatch eingebaut ist. Out of the Box Nachtwache unterstützt nur expect.element ('# element') ..., aber ich brauche expect (true) .to.be.true style.Wie chai's in nightwatch.js Tests

Dies ist (Teil) meiner Testdatei:

const { expect } = require('chai'); 

module.exports = { 
    'Add Rules (Tester 1)' : browser => { 
     ... some tests 
    } 
    after: browser => { 
     let username = 'username'; 
     let password = 'xxxxxxxx'; 

     fetchRulesFromJira({ browser, username, password }).then(rules => { 
      expect(rules.length).to.equal(2); 
      browser.end(); 
     }); 
    } 
}; 

Wenn die erwarten nicht der Ausgang

(node:3594) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): AssertionError: expected 3 to equal 2

Irgendwie nützlich, aber nicht schön. Wenn der Test erfolgreich ist, gibt es keine Ausgabe.

Wie kann ich nightwatch.js drucken die Ergebnisse oder eine andere Möglichkeit, eine Standardausgabe der Testergebnisse zu haben?

+0

Sie sollten das Versprechen zurückgeben: 'zurück fetchRulesFromJira ({Browser, Benutzername, Passwort}). Dann (....);' – Troopers

+0

Das tut es leider nicht. – Michael

Antwort

0

Ich stimme zu, es wäre schön, wenn die expect Zusicherungen für mehr als nur Elemente verwendet werden könnten. Die Problemumgehung, die ich stattdessen dafür verwende, ist browser.verify.ok() und dann füge ich einfach eine Nachricht hinzu, die beschreibt, was der Test tatsächlich macht, damit ich, wenn ich mir die Ergebnisse anschaue, sehen kann, um welchen Test es sich handelt. In Ihrem Fall wäre es so etwas wie diese:

browser.verify.ok(rules.length === 2, 'there are 2 rules'); 

In der Konsole wird eine Meldung wie diese:

Passed [ok]: there are 2 rules 

Obwohl, ich glaube nicht, das oben dargelegte Vorgehen Ihre Versprechen Ablehnung behandelt Problem überhaupt. Sie könnten einfach eine catch nach der then setzen und das wird Ihr Problem mit der unbehandelten Versprechen Ablehnung beheben. Dies ist der richtige Weg, um abgelehnte Versprechen zu behandeln.

fetchRulesFromJira({ browser, username, password }).then(rules => { 
     expect(rules.length).to.equal(2); 
     browser.end(); 
    }) 
    .catch(err => { 
     browser.assert.fail(err); 
    }); 

Auch nach wieder auf den Code der Suche Ich habe noch eine Sache zu nennen. Sie versuchen, eine Assertion in einer after Methode durchzuführen. Dies wird ausgeführt, nachdem alle Tests abgeschlossen sind. Normalerweise würden Sie die after Funktion für eine Art von Aufräumen oder Abbau verwenden. Ich bin immer noch neu in der Nachtwache, aber ich glaube nicht, dass es die beste Methode ist, dort Aussagen zu machen. Außerdem bin ich nicht ganz sicher, ob sie überhaupt in den Funktionen before[Each] oder after[Each] funktionieren. Wenn Sie diese Assertion in eine Testfunktion einfügen, sollten Sie die Ausgabe in der Konsole sehen.

0

Meine aktuelle Lösung ist die expect in try/catch einzukapseln und einen Fehler mit Nightwatch aufzurufen.

const { expect } = require('chai'); 

module.exports = { 
    'Add Rules (Tester 1)' : browser => { 
     ... some tests 
    } 
    after: browser => { 
     let username = 'username'; 
     let password = 'xxxxxxxx'; 

     fetchRulesFromJira({ browser, username, password }).then(rules => { 
      try { 
       expect(rules.length).to.equal(2); 
      } catch(error) { 
       browser.assert.fail(error); 
      } 

      browser.end(); 
     }); 
    } 
}; 

Das sieht nicht perfekt aus, aber die Ausgabe ist ganz in Ordnung.

Verwandte Themen