Модульное тестирование контроллера REST, чтобы проверить, возвращает ли он жестко запрограммированное размещение - PullRequest
0 голосов
/ 02 мая 2020

рассмотрим следующий код в node.js / express. js Реализация API отдыха. Он возвращает некоторое жестко запрограммированное содержимое после вызова GET для хоста: port /

var logger = require('../utilities/loggers')

exports.root_get = function(req, res) {
  res.writeHead(200, {'Content-Type': 'application/json'});
  res.write(JSON.stringify({Application: "NodeTours", Version: "2.0.0", Host: host, Port: port}));
  res.end();
}

Этот тест проверяет, может ли он быть вызван.

  context('/', function() {
    var root = require('../controllers/root')  
    it('should call / GET controller', function() {
      var res;
      spy = root.root_get = sinon.spy()
      root.root_get(null, res);
      expect(spy.calledOnce).to.equal(true);
    })
  })

Я хотел бы иметь возможность на модульное тестирование, если оно обеспечивает ожидаемый (жестко запрограммированный) ответ. Есть ли способ сделать это в Sinon или других рамках?

1 Ответ

0 голосов
/ 02 мая 2020

Один из способов модульного тестирования обработчика Express - вызвать его с поддельным http.ServerResponse. Например:

const assert = require('assert')
const http = require('http')
const handler = require('./root_get')

const req = {}
const res = new http.ServerResponse(req)
handler(req, res)

assert(res.statusCode === 200)

Другим вариантом является использование библиотеки supertest (правка: как вы правильно прокомментировали, это скорее библиотека тестирования интеграции). Это позволяет вводить фиктивные запросы в любой http.Server и выполнять утверждения на полученных вами ответах. Кто-то может поспорить, что это более выразительно (см. В документации исчерпывающий список утверждений, которые вы можете выполнить).

В вашем случае, если вы хотите утверждать, ваш маршрут возвращая 200:

const express = require('express');
const request = require('supertest');
const handler = require('./root_get')

const app = express();
app.get("/", handler);

request(app)
  .get("/")
  .expect(200)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...