2017-12-07 19 views
2

나는 koa2/mocha/chai/chai-http와 함께가는 TDD 워크 플로우를 얻으려고하고 있지만, 문제는 내가 테스트를 실행할 때 koa2 서버가 테스트가 끝난 후에 계속 실행된다는 것입니다. 그래서 나는 Ctrl + C (kill) 할 때마다 그것을해야합니다.모카와 함께 koa2를 TDD하는 방법은 무엇입니까?

모든 테스트를 실행 한 후 서버가 중지되는 TDD 워크 플로를 설정하는 방법을 알려줄 사람이 있습니까?

또한 테스트 파일에서 변경 사항을 확인하고 변경 사항이 감지되는 즉시 테스트를 다시하고 싶습니다 ... 아무도 도와 줄 수 있습니까? 나는 현재 (간체) 무슨 그물 -.-

에 아무것도 찾을 수 없습니다

package.json :

"scripts": { 
    "watch-server": "nodemon --watch 'src/**/*' -e ts,tsx --exec 'ts-node' ./src/server.ts", 
    "test": "./node_modules/mocha/bin/mocha --compilers ts:ts-node/register test/**/*.ts" 
}, 

server.ts :

app.use(routes_v1.routes()); 

export const server = app.listen(3000,() => { 
    console.log('Server running on port 3000'); 
}); 

테스트 :

process.env.NODE_ENV = 'test'; 

import * as chai from 'chai'; 
const chaiHttp = require('chai-http'); 

const should = chai.should(); 
chai.use(chaiHttp); 

import { server } from '../../../src/server'; 

describe('routes : login/register',() => { 
    describe('POST /sign_in',() => { 
    it('should return unauthorized for invalid user', (done) => { 
     chai.request(server) 
     .post('/sign_in') 
     .send({email: "[email protected]", password: "somePassword"}) 
     .end((err, res) => { 
     res.status.should.eql(401); 
     should.exist(err); 
     done(); 
     }); 
    }); 

    it('should return authorized for valid user', (done) => { 
     chai.request(server) 
     .post('/sign_in') 
     .send({email: '[email protected]', password: "authorizedPassword"}) 
     .end((err, res) => { 
     res.status.should.eql(200); 
     should.exist(res.body.token); 
     done(); 
     }); 
    }); 
    }); 

감사합니다.

답변

1

버전 4.0부터 모카는 모든 테스트가 완료되면 더 이상 강제로 프로세스를 종료하지 않습니다. 당신은 테스트가 완료되면 프로세스를 종료 할 CLI parameter -exit를 사용할 수 있습니다

"test": "mocha ... -exit" 

또는 과정을 통해 더 많은 제어 할 수 있습니다 또 다른 옵션은, Hooks을 사용하는 것입니다. 그래서 당신은 테스트 (들)을 실행하기 전에 서버를 시작하고 후에 중지 할 수 있습니다 : 예를 들어

describe('...',() => { 
    let server; 

    before(() => { 
    server = app.listen() 
    }); 
    after(() => { 
    server.close() 
    }); 

    ... 
}) 

, 당신은 this test 좀 걸릴 수 있습니다. Jest와 supertest를 사용하고 있지만 생각은 같습니다.