Как TDD koa2 с мокко?

Я пытаюсь запустить рабочий процесс TDD с помощью koa2/mocha/chai/chai-http, но моя проблема в том, что когда я запускаю тесты, сервер koa2 продолжает работать после завершения тестов. Так что мне приходится каждый раз нажимать Ctrl+C (убивать).

Может ли кто-нибудь сказать мне, как настроить рабочий процесс TDD, при котором сервер останавливается после выполнения всех тестов?

Кроме того, я хотел бы посмотреть тестовые файлы на наличие изменений и повторно запустить тесты, как только будут обнаружены изменения... кто-нибудь может помочь с этим? ничего не могу найти в сети -.-

Что у меня сейчас есть (упрощенно):

пакет.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"
},

сервер.тс:

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();
      });
    });
  });

Спасибо.


person Johannes Frey    schedule 07.12.2017    source источник
comment
можете ли вы также поделиться примером скелета src/server? Пытаюсь заставить это работать с моим приложением koa2, но я думаю, что попал в состояние гонки.   -  person Dylan Pierce    schedule 10.04.2020


Ответы (1)


Начиная с версии 4.0 Mocha больше не будет принудительно завершать процесс после завершения всех тестов. Вы можете использовать параметр CLI -exit для выхода из процесса, когда тесты законченный:

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

Или другой вариант, дающий вам больше контроля над процессом, — использовать перехватчики. Таким образом, вы можете запустить сервер перед запуском тестов и остановить его после:

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

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

  ...
})

В качестве примера вы можете взглянуть на этот тест . Он использует Jest и супертест, но идея та же.

person Oles Savluk    schedule 07.12.2017