2013-06-18 5 views
5

Voglio essere in grado di avere una serie di test di Casper JS e ottenere un codice di uscita su 0 in caso di successo e non zero su errore o errore di test (voglio eseguire il comando casper da java e determinare se un test è passato).Come ottenere Casper JS per restituire un codice di uscita che indica lo stato di successo del test?

Il problema che sto avendo è che un codice di uscita di 0 viene sempre restituito. Ecco un test di esempio in cui questo accade:

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); 
}); 

Tutti i seguenti comandi risultato in un codice di uscita 0:

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 

Come posso richiamare Casper e stabilire se i test è riuscito o fallito/errato da Java?

+0

Come sei riuscito a restituire il codice di uscita previsto? –

risposta

0

Il problema che sto avendo è che un codice di uscita di 0 viene sempre restituito.

Il vostro test Casper dovrebbe essere così:

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); 
}); 

Per eseguire:

casperjs simpletest.js --value = true

Come posso richiamare Casper e determinare se i test sono riusciti o falliti/errati da Java?

Si dovrebbe guardare questa risposta:

CasperJS passing data back to PHP

0

In primo luogo, non è possibile sovrascrivere l'istanza Casper in modalità di prova, vedere http://docs.casperjs.org/en/latest/testing.html#test-command-args-and-options

Rimuovere

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

dal codice .

Quindi provare

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

Inizia casperjs con

--fail-fast 

in modo che ogni test uscirà con il codice 1.

Poi 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); 

Naturalmente bisogno di cambia i percorsi per adattarli al tuo ambiente.

Spero che questo aiuti!

+0

Vedere f.e. i nostri test frontend: https://github.com/structr/structr/blob/develop/structr-ui/src/test/java/org/structr/web/test/FrontendTest.java –

0

restituire il codice predefinito per il fallimento (per esempio per noi abbiamo dato 99 (casuale))

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

Allo stesso modo è possibile definire codice diverso per le altre questioni ad alto livello

ad esempio: per ottenere il riprova la logica in atto possiamo usare i codici onWaitTimeout

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