如何让Casper JS返回一个表示测试成功状态的退出代码?

时间:2013-06-18 18:42:55

标签: casperjs

我希望能够拥有一组Casper JS测试并在成功时获得退出代码0,在错误或测试失败时获得非零(我想从java运行casper命令并确定是否测试传递)。

我遇到的问题是始终返回退出代码0。以下是发生这种情况的示例测试:

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

以下所有命令都会导致退出代码为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

如何调用Casper并确定测试是成功还是失败/错误?

3 个答案:

答案 0 :(得分:1)

首先,您无法在测试模式下覆盖casper实例,请参阅http://docs.casperjs.org/en/latest/testing.html#test-command-args-and-options

删除

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

来自你的代码。

然后尝试

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

使用

启动casperjs
--fail-fast

以便每个测试都将以代码1退出。

然后在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);

当然,您需要更改适合您环境的路径。

希望有所帮助!

答案 1 :(得分:0)

  

我遇到的问题是总是返回退出代码0。

你的casper测试应该是这样的:

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

运行:

casperjs simpletest.js --value = true

  

如何调用Casper并确定测试是成功还是失败/错误?

你应该看看这个答案:

CasperJS passing data back to PHP

答案 2 :(得分:0)

返回预定义的失败代码(例如,对于我们,我们给出了99(随机))

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

同样,您可以为高级别的其他问题定义不同的代码

例如:为了获得重试逻辑,我们可以使用onWaitTimeout代码

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