如何同步执行DOH测试?

时间:2011-11-29 12:36:29

标签: doh doh-robot

任何人都可以帮我找到解决这个问题的方法。 我有(假设)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(.....);
}

任何帮助都会很棒。

1 个答案:

答案 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开始)。