2013-06-18 9 views
5

Chcę móc mieć zestaw testów Casper JS i uzyskać kod powrotu z powrotem 0 w przypadku powodzenia i niezerowy w przypadku błędu lub niepowodzenia testu (chcę uruchomić komendę casper z języka Java i określić, czy test przeszedł pomyślnie).Jak uzyskać, aby Casper JS zwrócił kod wyjścia, który wskazuje status sukcesu testu?

Problem polega na tym, że kod wyjścia 0 jest zawsze zwracany. Oto test przykład gdzie tak się dzieje:

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

Wszystkie poniższe komendy spowodować kodem wyjścia 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 

Jak mogę powołać Casper i określić, czy testy udało, czy nie/wymazał z Java?

+0

W jaki sposób udało się w końcu zwrócić oczekiwany kod wyjścia? –

Odpowiedz

0

Problemem jest to, że kod wyjścia 0 jest zawsze zwracany.

test Casper powinno być tak:

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

Aby uruchomić:

casperjs simpletest.js --value = true

Jak mogę powołać Casper i określić, czy testy powiodły się, czy nie powiodło się/pomyłkowało z Javy?

Należy szukać tej odpowiedzi:

CasperJS passing data back to PHP

0

Po pierwsze, nie można zapisać wystąpienie Casper w trybie testowym, zobacz http://docs.casperjs.org/en/latest/testing.html#test-command-args-and-options

Usuń

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

z kodu .

Następnie spróbuj

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

start casperjs z

--fail-fast 

tak, że każda próba będzie wyjść z kodem 1.

Następnie w Javie

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

Oczywiście, że potrzebować zmień ścieżki do swojego środowiska.

Nadzieję, że pomaga!

+0

Zobacz f.e. nasze testy frontendowe: https://github.com/structr/structr/blob/develop/structr-ui/src/test/java/org/structr/web/test/FrontendTest.java –

0

Zwraca kod predefiniowany do awarii (na przykład dla nas, daliśmy 99 (losowo))

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

Podobnie można zdefiniować inny kod dla innych spraw na wysokim poziomie

np: aby uzyskać logika powtórzenia w miejscu możemy użyć onWaitTimeout kodów

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