2017-12-07 10 views
2

私はkoa2/mocha/chai/chai-httpと一緒に行くTDDワークフローを手に入れようとしていますが、テストを実行すると、テストが終了した後もkoa2サーバーが稼働し続けます。私は毎回Ctrl + C(kill)する必要があります。モカとTDD koa2の関係は?

すべてのテストの実行後にサーバーが停止する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以降、すべてのテストが完了すると、Mochaはプロセスを強制終了しなくなりました。

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

それとも、あなたにプロセスをより細かく制御できます別のオプションは、 Hooksを使用することです:あなたは、テストが終了したときにプロセスを終了し CLI parameter -exitを使用することができます。ですから、テスト(複数可)を実行する前にサーバを起動した後、それを止めることができます。例として

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

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

    ... 
}) 

、あなたはthis testを見てみることができます。 Jestとsupertestを使用していますが、アイデアは同じです。