2016-07-26 2 views
2

for 루프를 사용하여 동적으로 테스트를 생성하려고하지만 생성 할 테스트 수가 비동기 태스크에서 가져옵니다.모카에서 'describe'전에 비동기 코드 실행하기

var noOfTestsToRun; 

before(function() { 
    return someAsyncTask().then(function(result) { 
     noOfTestsToRun = result; 
    }) 
}); 

describe('My Test Suite', function() { 
    for (var i = 0; i < noOfTestsToRun; i++) { 
     it('Test ' + i, function() { 
      //... 
     }); 
    } 
}); 

그러나, noOfTestsToRun = result이는 for 루프에 도달하면 실행하지 않는 것 : 여기 내 코드입니다.

이런 종류의 문제에 대한 해결책이 있는지 궁금합니다. 고맙습니다.

+0

메디은 위의 링크는 전에 모든 비동기 작업을 실행에 관한 '는'광산 '설명' – batluck

+0

루이 전에 비동기 작업을 실행에 대한, 그것은 작동, 대단히 감사합니다. 그러나 또 하나의 질문입니다. 만약 다른 비동기 태스크가 다른'describe' 내에서'describe' 전에 실행되기를 원한다면 어떻게해야할까요? – batluck

+0

먼저 비동기 코드를 실행 한 다음'before ','describe' 및 all과 같은'mocha' 물건을 모두 정의하십시오. – MarcoL

답변

0

done 콜백을 before 함수에 전달하십시오.

var noOfTestsToRun; 

before(function(done) { 
    return someAsyncTask().then(function(result) { 
     noOfTestsToRun = result; 

     // Complete the async stuff 
     done(); 
    }) 
}); 

describe('My Test Suite', function() { 
    for (var i = 0; i < noOfTestsToRun; i++) { 
     it('Test ' + i, function() { 
      //... 
     }); 
    } 
}); 
하여 비동기 작업이 완료

done()은 우리가 비동기 물건을 완료하고 기대에 이동할 수 있습니다 모카을 말하고있다,라고합니다.

UPDATE는

그래서, 당신의 목표는 모카가 동적 테스트를 실행하는 것입니다.

해킹을 통해이를 달성 할 수 있습니다. before을 강제 실행하려면 it 블록이 필요합니다. 그리고 이전에는 비동기 결과에 따라 it 테스트를 동적으로 생성 할 수 있습니다.

before(function() { 
    return someAsyncTask().then(function(result) { 
     describe('My Test Suite (dynamic)', function() { 
      for (var i = 0; i < result; i++) { 
       it('Test ' + i, function() { 
        // ... 
       }); 
      } 
     }); 
    }); 
}); 

it('should force before to execute', function() { 
    console.log('Hack to force before to execute'); 
}); 

Working pen

+0

빠른 답장을 보내 주셔서 감사합니다. 하지만 작동하지 않습니다. 'someAsyncTask()'를'Promise.resolve (1)'로 바꾸고 해결책을 시도했습니다. 'for' 루프에 도달하면'noOfTestsToRun'은 여전히 ​​정의되지 않았습니다. – batluck

+1

시도해주세요. http://stackoverflow.com/questions/22465431/how-can-i-dynamically-generate-test-cases-in-javascript-node – Prashant

+0

위의 해는'forEach'가 테스트를 생성하기 위해 상수 값'[ 'nl', 'fr', 'de']'를가집니다. 내 회사는 비동기 작업의 가치가 필요합니다. 그것은 내 문제를 해결하지 못합니다. – batluck

관련 문제