Тестирование сервера в Коа

Я использую Koa для веб-разработки в NodeJS, у меня есть файл сервера, который ничего не делает, кроме запуска сервера и инициализации нескольких промежуточных программ. Ниже приведен пример кода

сервер.js

const Koa = require('koa');
var Router = require('koa-router');
var bodyParser = require('koa-bodyparser');
var app = new Koa();
var router = new Router();
app.use(bodyParser());
router.post('/abc', AbcController.abcAction);
router.post('/pqr', PqrController.pqrAction);

app.use(router.routes());
app.listen(3000);

Когда мы запустим npm start, сервер запустится на порту 3000, и теперь я хочу написать модульный тест для этого файла, используя mocha, chai and sinon.

Один из способов — создать тестовый файл, скажем, server_test.js, и сделать что-то вроде следующего (просто пример):

var server = require(./server);
server.close();

Для этого нам нужно добавить следующие строки в server.js

var server = app.listen(3000);
module.exports = server;

Хорошо ли это? Я думаю, что мы не должны выставлять сервер таким образом?

Поскольку в этом файле нет самостоятельно созданной функции, действительно ли требуется тестирование?

Должны ли мы также исключать такие файлы из охвата гидролокатора?

Любое другое лучшее предложение всегда приветствуется. Нужна ваша помощь, ребята. Спасибо.


person chaitanya90    schedule 13.05.2018    source источник


Ответы (2)


Вы можете использовать chai-http для тестирования конечной точки

это то, что я использую для своего проекта

const chai = require('chai');
const chaiHttp = require('chai-http');
const expect = chai.expect;

const app = require('../app');

describe('/GET roles', function () {
  it('should return bla bla bla',
    function (done) {
      chai.request(app)
        .get('/roles')
        .end(function (err, res) {
          expect(res.status).eql(200)
          expect(res.body).to.have.property('message').eql('Get role list success');
          expect(res.body).to.have.property('roles');
          expect(err).to.be.null;
          done();
        });
    }
  );
});
person Luthfi    schedule 13.05.2018
comment
Это экспресс-проект, я думаю, Коа можно протестировать по той же методике. - person Luthfi; 13.05.2018

В основном есть 2 способа, с помощью которых вы можете обрабатывать оставшиеся случаи.

Один из них — поместить тестовые примеры вместе с файлом исходного кода. (в вашем случае это будет server.spec.js). Я лично предпочитаю этот способ, поскольку он поощряет модульность кода и делает ваши модули полностью независимыми.

Другой способ — создать другой каталог, скажем, test, куда вы можете поместить все свои тестовые примеры в соответствии с той же структурой каталогов, что и основное приложение. Это действительно полезно для приложений, в которых тестовые примеры рассматриваются только на этапе разработки, а затем во время производства вы можете просто игнорировать отправку этих файлов.

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

Надеюсь это поможет

person Parth Mahajan    schedule 14.05.2018
comment
если мне нужно проверить файл моего сервера в другом тестовом файле, мне придется импортировать server... это хорошая практика? - person chaitanya90; 14.05.2018
comment
По мне. Нет. Создайте функцию, скажем, «init», и напишите тестовый пример для этой функции, используя заглушки и шпионы. Загляните в модуль «rewire», и вам не придется экспортировать какую-либо частную выдумку только ради того, чтобы протестировать эту функцию. - person Parth Mahajan; 14.05.2018
comment
Кроме того, ваши тестовые случаи должны быть независимыми. Если вы считаете, что вам по-прежнему требуется какой-то важный файл для работы тестовых случаев, передайте его следующим образом: mocha —require your_necessary_file.js - person Parth Mahajan; 14.05.2018