我需要类似于mocha的only
方法
it.only "should test something"
对于那些不知道它的人意味着如果我不写only
可以在CasperJS中做类似的事情吗?现在我正在使用烦人的“评论/取消评论”技术
答案 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();