我正在尝试编写一个助手库,以帮助编写测试。这些测试在异步运行,但我需要强制它们按顺序运行。在我们工作中使用的测试框架funcunit中,这是通过使用嵌套回调来完成的,但这些回调层数深达30层,难以编写、难以维护等等。
我有一些辅助函数,如makeTest和clickOn:
helpers.makeTest = function (f) {
if(!helpers.tests)
helpers.tests = //I want this to be an array of the functions returned by clickOn//;
if(helpers.tests.length)
{
helpers.tests.shift()();
}
else
{
ok(true, 'Tests passed');
}
};
helpers.clickOn = function() {
var args = Array.prototype.slice.call(arguments),
selector = args.shift();
return function() {
var el = S(selector);
el.exists(function(){
S.wait(100, function(){
el.click(function(){
helpers.makeTest();
});
});
});
}
}
我希望您能够像这样编写测试:
test("copy folder with helpers", function () {
helpers.makeTest(function(){
helpers.clickOn("#openDialogFolder");
helpers.clickOn("input#-2");
helpers.clickOn("a#copyTrigger");
});
});
然而,makeTest返回的函数只是未定义,我希望它返回一个函数数组,有什么方法吗?
编辑:我似乎已经通过创建helper.queue = [],并将由clickOn创建的函数推送到该队列中来解决了我的问题。我可以从makeTest访问它。