是否可以在CasperJS中仅运行一个特定的测试?

时间:2014-06-18 10:49:34

标签: casperjs

我需要类似于mocha的only方法

it.only "should test something"

对于那些不知道它的人意味着如果我不写only

,mocha将在所有将要启动的测试中启动这一个测试

可以在CasperJS中做类似的事情吗?现在我正在使用烦人的“评论/取消评论”技术

2 个答案:

答案 0 :(得分:0)

您可以使用参数选项:casperjs test scriptName.js --only=true

在你的casperjs文件中:

if (casper.cli.get("only")){var only=true;}
else {var only=false;}

然后在你想要的断言之前:

if (!only){ test.assertExists(....);}
else {"should test something"}

您可以采用类似的方式进行相反的操作。

编辑:

如果是一个场景,你可以使用casperjs setUp()函数并调用另一个函数()来过滤场景,使用命令选项和casper.test.done(),如下所示:

var setLevel = function(level){
    if(casper.cli.get("mode") !== level){
        casper.test.done();
    }
};


casper.test.begin('\n***** Scenario : *****',{
setUp: function(test) {
    setLevel("only");
},

test: function(test){
    "use strict";
    casper.start()
    .run(function() {
            this.test.comment('--- Done ---\n');
            test.done();
    });
}
});

因此,如果您使用casperjs test path/to/folder --mode="only"调用它,它会立即关闭所有级别未设置为 的情况。它会输出打开日志,如果您不想看到它们,请在casper.test.begin()之前使用casper.test.setUp()方法。是的,在调用begin()之前完成测试很奇怪,但是如果我记得很清楚它可以工作。

它也是一个丑陋的黑客,但对我来说它是一个解决方案。问题是:在每个文件中使用setUp()setLevel()是必要的。无论如何,它都没有本地选项。

答案 1 :(得分:0)

创建自己的两个函数,包装casper.test.begin并使用它们。您将需要第三个实际安排测试的函数(对于猴子修补版本,请参见下面的跳转):

var testcase = (function(casper){
    var scenarios = [],
        onlySet = false;
    return {
        it: function(){
            if (!onlySet) {
                scenarios.push(arguments);
            }
        },
        itOnly: function(){
            onlySet = true;
            scenarios = [arguments];
        },
        build: function(){
            scenarios.forEach(function(scenario){
                casper.test.begin.apply(casper.test, scenario);
            });
        }
    };
})(casper);

然后您可以用这种方式编写场景:

testcase.it("something", function suite(test){
    test.assert(true);
});

testcase.itOnly("something2", function suite(test){
    test.assert(true);
});

testcase.it("something3", function suite(test){
    test.assert(true);
});

testcase.build();

输出将是:

# something2
PASS Subject is strictly true

您当然可以使用您的函数修补casper.test实例:

(function(casper){
    // IIFE to avoid leaking scenarios
    var scenarios = [],
        onlySet = false,
        oldBegin = casper.test.begin;
    casper.test.begin = function(){
        if (!onlySet) {
            scenarios.push(arguments);
        }
    };
    casper.test.beginOnly = function(){
        onlySet = true;
        scenarios = [arguments];
    };
    casper.test.build = function(){
        scenarios.forEach(function(scenario){
            oldBegin.apply(casper.test, scenario);
        });
    };
})(casper);

casper.test.begin("something", function suite(test){
    test.assert(true);
});

casper.test.beginOnly("something2", function suite(test){
    test.assert(true);
});

casper.test.begin("something3", function suite(test){
    test.assert(true);
});

casper.test.build();