任何人都可以帮我找到解决这个问题的方法。 我有(假设)3个doh函数第一个是异步的,其余的是同步的。我必须首先调用异步函数,并将此函数的结果传递给其他两个函数是否可能?
示例:
doh.register(".....", [
{
name : "asyncFunction",
runTest : function(){
function callback(result){
//How to pass the result to fun_2 and fun_3
//also fun_2 or fun_3 should be deferred until this function executes
}
}
},
function fun_2(result){
//doh.assertTrue(.....);
},
function fun_3(result){
//doh.assertTrue(.....);
}
任何帮助都会很棒。
答案 0 :(得分:2)
所以,听起来你的第一个功能基本上是其他测试的设置功能。</ p>
它是可能做的 - 基本上使用Deferreds / promises,但它有点icky,你可能会因测试超时而受到严重刺痛。
所以,这里有一些设置需要一些带有2s的异步代码。所有测试都成为异步测试,一旦“设置”延迟完成,它们就会完成工作。
由于您的“后续”测试已变为异步,因此您需要确保它们的超时时间能够应对异步设置所需的时间(至少对于第一个正在运行的设置)。
// Some asynchronous initialization that takes 2s
setTimeout(function() {
setupCompletion.resolve({ result: 42 });
}, 2000);
doh.register("my.test1", [
{
name: "waits for async setup to complete",
timeout: 5000,
runTest: function() {
var d = new doh.Deferred();
setupCompletion.then(function (res) {
doh.is(42, res.result);
d.callback(true);
});
return d;
}
},
{
name: "also waits for async setup to complete",
timeout: 5000,
runTest: function() {
var d = new doh.Deferred();
setupCompletion.then(function (res) {
doh.is(43, res.result + 1);
d.callback(true);
});
return d;
}
}
]);
当然,如果可以安排测试的setUp
函数返回延迟,那将是很好的,但是doh现在不支持(从v1.7.2开始)。