2017-10-27 2 views
0

나는 얻을 수없는 것 같습니다 before 후크가 비동기.모카 전에 비동기 적으로 작동하지 않는 훅

before 후크를 사용하여 시작했지만 실패 할 때 픽업을 시도하므로 테스트 할 서버가 없으므로 전체 블록을 건너 뛰거나 건너 뛸 수 있습니다. 와).

내 코드 전체에 [async] before 후크를 사용했지만,이 경우 내 done이 (가) 대기하는 것은 아닙니다.

기본적으로 MochaJS 테스트가 많으며 한 블록에 대해 RESTful API를 테스트하기 위해 요청을 할 수 있도록 웹 서버를 시작해야합니다. 나는 그것이 성공적으로 시작되었는지, 따라서 비동기 메소드를 확인하고 싶다.

describe('RESTful Tests', function(){ 
    // Start up the whole express server for these API tests 
    before(function(done) { 
     try { 
      server.on('error', (e) => { 
       console.error("HERE"); 
       done(); 
      }); 

      listener = server.listen(port, function() { 
       console.log("Server Started"); 
       done(); 
      }); 
      console.error("AFTER LISTEN"); 

     } catch(err) { 
      console.error("ON Caught"); 
      done(); 
     } 
     console.error("At End!!"); 
    }); 

이 실행하고 테스트에 1) "before all" hook로 표시되지만 done가 호출되는 것이 기다리지 않습니다. 난 단지 다른 항목의

RESTful Tests 
AFTER LISTEN 
At End!! 
    1) "before all" hook 

없음 표시하지 ... 출력을 받고 있어요,하지만 난 EADDRINUSE에 대한 (I 포트를 차단 한으로 예상) 예외를 얻을 것이다. 나는 이것을 잡는 방법을 찾기 위해 정말로 고심하고있다.

다른 (일종의) "스레드"에있는 것을 이해하므로 오류가 발생하지는 않지만 여전히 ... 비동기식 done 메서드가 적용되지 않는 이유는 무엇입니까? 약간의 오해의 소지가 밖으로

답변

0

노드/ExpressJS 문서 상태가 server 개체의 .on('error' 방법을 넣어 ... 문서의 일부를 보인다. 이 경우에는 listener 개체에 있어야합니다!

그래서 내 마지막 [작업] 코드는 다음과 같습니다 ...

listener = server.listen(port, function() { 
    done(); 
}).on('error', (function(e) { 
    this.skip(e.code); 
    done(); 
}).bind(this)); 

야호! :)

관련 문제