Модульное тестирование Экспресс с mocha / chai / sinon - как мне проверить форму моего res.send объекта? - PullRequest
1 голос
/ 06 июня 2019

Я тестирую отдельные компоненты, которые приводят к ответу API, другими словами, я тестирую его независимо от маршрута, так как каждый маршрут проходит через этот компонент

Мне нужно проверить, чтоФункция, отвечающая за отправку моего экспресс-ответа, имеет правильную форму, но без отправки реального HTTP-запроса я не могу понять, как его протестировать.

Вот мой компонент

'use strict'

const moment = require('moment')
module.exports = (req, res, payload) => {
  try {
    let data = []
    if (payload.token) data.push({ token: payload.token })
    data.push({ [payload.resource]: payload.data })
    res.send({
      status: 'OK',
      recordCount: payload.data.length,
      startTimestamp: req.start.toDate(),
      endTimestamp: moment().toDate(),
      timeTaken: moment().toDate().getTime() - req.start.toDate().getTime(),
      data: data
    })
  } catch (error) {
    return res.status(500).json({
      errors: [{
        location: 'n/a',
        param: 'n/a',
        msg: 'something happened when generating the response'
      }]
    })
  }
}

здесьмой текущий тест ...

const chai = require('chai')
const sinonChai = require('sinon-chai')
const { mockReq, mockRes } = require('sinon-express-mock')
const moment = require('moment')
const present = require('../../src/lib/present')

chai.use(sinonChai)

describe('unit test the present lib method', () => {
  it('should return the expected shape', (done) => {
    const req = mockReq({
      start: moment().toDate(),
      body: {}
    })
    const res = mockRes()
    const shape = present(req, res, {
      resource: 'empty_array',
      data: []
    })
    shape.should.have.own.property('data') // doesnt work
    // AssertionError: expected { Object (append, attachement, ...) } to have own property 'data'
    done()
  })
})

1 Ответ

0 голосов
/ 06 июня 2019

Для правильного тестирования схемы ответа вам нужно выполнить тест E2E, который требует от вас, чтобы отправить вызов API.

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

Вы можете прочитать следующую статью: https://www.freecodecamp.org/news/how-to-mock-requests-for-unit-testing-in-node-bb5d7865814a/

...