Programing

테스트를 위해 ExpressJS 인스턴스를 프로그래밍 방식으로 종료하려면 어떻게합니까?

lottogame 2020. 9. 5. 10:26
반응형

테스트를 위해 ExpressJS 인스턴스를 프로그래밍 방식으로 종료하려면 어떻게합니까?


Express 인스턴스를 종료하는 방법을 알아 내려고합니다. 기본적으로 .listen(port)호출 의 반대를 원합니다. Express 서버가 수신을 중지하고 포트를 해제하고 완전히 종료하도록하려면 어떻게해야합니까?

나는 이것이 이상한 쿼리처럼 보일 수 있다는 것을 알고 있으므로 여기에 컨텍스트가 있습니다. 아마도 이것에 접근하는 다른 방법이 있을지도 모르지만 나는 그것에 대해 잘못된 방식으로 생각하고 있습니다. 내 socket.io/nodejs 앱에 대한 테스트 프레임 워크를 설정하려고합니다. 단일 페이지 앱이므로 테스트 스크립트에서 ( Mocha를 사용하고 있습니다.,하지만 그게 중요하지 않습니다.) 서버를 시작하고 이에 대해 테스트를 실행 한 다음 서버를 종료 할 수 있기를 원합니다. 테스트가 시작되기 전에 서버가 켜져 있다고 가정하거나 테스트 중 하나가 서버를 시작하도록하고 모든 후속 테스트가 작동한다고 가정하여이 문제를 해결할 수 있지만, 정말 지저분합니다. 각 테스트 파일이 적절한 설정으로 서버 인스턴스를 시작한 다음 테스트가 끝나면 해당 인스턴스를 종료하는 것을 선호합니다. 즉, 테스트 실행에 이상한 종속성이 없으며 모든 것이 깨끗합니다. 또한 시작 / 종료 테스트를 수행 할 수 있음을 의미합니다.

그래서, 이것을하는 방법에 대한 조언이 있습니까? 수동으로 예외를 트리거하여 예외를 발생시키는 것에 대해 생각했지만 지저분 해 보입니다. Express 문서와 소스를 살펴 봤지만 서버를 종료하는 방법을 찾을 수없는 것 같습니다. 이를 위해 socket.io에 무언가가있을 수도 있지만 소켓 서버가 Express 서버에 연결되어 있기 때문에 Express 계층에서 발생해야한다고 생각합니다.


Express 서버가 더 이상 노드 http 서버에서 상속하지 않기 때문에 상황이 변경되었습니다 . 다행히 app.listen은 서버 인스턴스를 반환합니다.

var server = app.listen(3000);

// listen for an event
var handler = function() {
  server.close();
};

사용 app.close(). 전체 예 :

var app = require('express').createServer();
app.get('/', function(req, res){
  res.send('hello world');
});
app.get('/quit', function(req,res) {
  res.send('closing..');
  app.close();
});
app.listen(3000);

전화 app.close()테스트가 종료 한 때 콜백 내부. 그러나 프로세스가 여전히 실행 중임을 기억하십시오 (더 이상 듣고 있지 않음).

그 후에 프로세스를 종료해야하는 경우을 호출하십시오 process.exit(0).

연결:

app.close : http://nodejs.org/docs/latest/api/http.html#server.close (동일하게 적용됨)

process.exit : http://nodejs.org/docs/latest/api/process.html#process.exit


서버를 시작하고, 테스트를 실행하고, 서버를 중지하는 bash 스크립트를 작성하여 쉽게 수행 할 수 있습니다. 이는 모든 테스트를 빠르고 쉽게 실행할 수 있도록 해당 스크립트에 별칭을 지정할 수 있다는 장점이 있습니다.

전체 연속 배포 프로세스에 이러한 스크립트를 사용합니다. 이에 대한 통찰력을 얻으려면 Jon Rohan의 Dead Simple Git Workflow 를 참조하십시오.

참고 URL : https://stackoverflow.com/questions/8659011/how-do-i-programmatically-shut-down-an-instance-of-expressjs-for-testing

반응형