2013-06-18 14 views
5

Ich möchte in der Lage sein, eine Reihe von Casper JS-Tests und erhalten einen Exit-Code zurück von 0 bei Erfolg und nicht Null bei Fehler oder Testfehler (Ich möchte den Casper-Befehl von Java ausführen und feststellen, ob ein Test bestanden).Wie kann Casper JS einen Exit-Code zurückgeben, der den Test-Erfolgsstatus anzeigt?

Das Problem, das ich habe, ist, dass immer ein Exit-Code von 0 zurückgegeben wird. Hier ist ein Beispiel Test, in dem dies geschieht:

var casper = require('casper').create(); 

casper.start('http://www.google.com', function() { 
    this.test.assertEquals(true, casper.cli.options['value']); 
}); 

casper.run(function() { 
     casper.test.done(1); 
}); 

Alle folgenden Befehle in einem Exit-Code von 0 führen:

C:/casperjs/bin/casperjs test --value=true C:/Temp/simpletest.js 
C:/casperjs/bin/casperjs test --value=false C:/Temp/simpletest.js 
C:/casperjs/bin/casperjs --value=true C:/Temp/simpletest.js 
C:/casperjs/bin/casperjs --value=false C:/Temp/simpletest.js 

Wie kann ich Casper aufrufen und bestimmen, ob die Tests erfolgreich war oder fehlgeschlagen/fehlerhaft von Java?

+0

Wie hast du es endlich geschafft, den erwarteten Exit Code zurückzugeben? –

Antwort

0

Das Problem, das ich habe, ist, dass immer ein Exit-Code von 0 zurückgegeben wird.

Ihr casper Test sollte so sein:

var casper = require('casper').create(); 
var system = require('system'); 
var param; 

casper.start('http://www.google.com', function() { 

    //get parameter from command line 
    system.args.forEach(function (arg, i) { 
     if(arg.search(/--value=/i) != -1){ 
      param = arg.replace(/--value=/g, ""); 
     } 
    });  

    this.test.assertEquals(true, Boolean(param)); 
}); 

casper.run(function() { 
     this.test.done(1); 
     this.test.renderResults(true); 
}); 

auszuführen:

casperjs simpletest.js --value = true

Wie kann ich Casper aufrufen und feststellen, ob die Tests erfolgreich waren oder von Java fehlgeschlagen sind

Sie sollten diese Antwort aussehen:

CasperJS passing data back to PHP

0

Zuerst können Sie die casper Instanz im Testmodus überschreiben, siehe http://docs.casperjs.org/en/latest/testing.html#test-command-args-and-options

entfernen

var casper = require('casper').create(); 

aus dem Code .

versuchen Dann

casper.start('http://www.google.com', function(test) { 
    test.assertEquals(true, casper.cli.options['value']); 
}); 

starten casperjs mit

--fail-fast 

so dass jeder Test mit Code verlassen wird 1.

Dann in Java

String[] args = {"/bin/sh", "-c", "casperjs test --fail-fast simpletest.js"}; 

Process proc = Runtime.getRuntime().exec(args); 

logger.log(Level.INFO, IOUtils.toString(proc.getInputStream())); 
String warnings = IOUtils.toString(proc.getErrorStream()); 

if (StringUtils.isNotBlank(warnings)) { 
    logger.log(Level.WARNING, warnings); 
} 

int exitValue = proc.exitValue(); 

assertEquals(0, exitValue); 

Natürlich können Sie müssen Ändern Sie die Pfade entsprechend Ihrer Umgebung.

Hoffe, dass hilft!

+0

Siehe z.B. unsere Frontend-Tests: https://github.com/structr/structr/blob/develop/structr-ui/src/test/java/org/structr/web/test/FrontendTest.java –

0

der vordefinierten Code Zurück zum Ausfall (für zB für uns haben wir 99 (random))

//Capture all fails 
casper.test.on("fail", function() { 
    casper.exit(99); 
}); 

Ähnlich Sie anderen Code für andere Themen auf hohem Niveau

zB definieren: die bekommen Wiederholungslogik an Ort und Stelle können wir verwenden onWaitTimeout Codes

casper.options.onWaitTimeout = function() { 
    casper.screenCapture('POETerror', true); 
    this.exit(98); 
};