2011-11-29 2 views
0

아무도 나를이 문제에 대한 해결책을 찾는 데 도움이 될 수 있습니다. 3 가지의 doh 함수가 있다고 가정합니다. 첫 번째 함수는 비동기이며 나머지는 동기식입니다. 먼저 비동기 함수를 호출해야하며이 함수의 결과가 다른 두 함수에 전달 될 수 있습니까?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(.....); 
} 

어떤 도움도 좋은 것입니다.

답변

2

첫 번째 기능은 기본적으로 다른 테스트의 설정 기능인 것처럼 들립니다.

입니다. 기본적으로 Deferreds/promises를 사용하고 있지만 조금 불안해서 테스트 시간 초과로 심하게 찔릴 수 있습니다.

그래서 2s가 소요되는 비동기 코드가있는 설정이 있습니다. 모든 테스트는 비동기 테스트가 완료되면 '설정'지연이 완료된 후에 수행됩니다.

'follow-on'테스트가 비동기식이 되었기 때문에 비동기식 설정 (적어도 처음 실행되는 경우)에 소요될 시간을 감안해야합니다. 그것은이 이연 반환하는 테스트의 setUp 기능을 준비 할 수 있다면 물론

  // 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; 
        } 
       } 
      ]); 

, 그것은 좋은 것입니다,하지만, DOH는 (v1.7.2 기준)이 지금은 지원하지 않습니다.

+0

감사합니다. Royston ... – Vikram

+0

안녕하세요. Vikram. 내 대답으로 문제가 해결되면 옆에있는 큰 체크 박스를 클릭하면 다른 사람들이 유용하다는 것을 알 수 있습니다. –

관련 문제