Я хочу узнать, как правильно выполнить модульное тестирование экспресс-конечной точки, в частности только кода обработчика, и подтвердить правильное состояние и данные в ответе.
Я хочу сделать это БЕЗ supertest, поскольку у меня есть вспомогательная библиотека с кучей функций промежуточного программного обеспечения, и я хочу протестировать их изолированно.
Для такого простого приложения, как это
'use strict'
const express = require('express')
const app = express()
const helloWorld = require('./helloWorld')
app.get('/', helloWorld)
app.listen(5000, () => console.log('we\'re up!'))
С простой функцией-обработчиком, такой какэто
'use strict'
function helloWorld (req, res, next) {
const data = {
hello: 'world'
}
res.status(200).send(data)
}
module.exports = helloWorld
У меня есть этот тест в процессе создания
'use strict'
const helloWorld = require('./helloWorld')
describe('#helloWorld', () => {
it('should return 200', () => {
const req = {
}
const res = {
status: function (code) {
this.statusCode = code
return this
},
send: function () {
return this
}
}
const next = () => {}
helloWorld(req, res, next)
// TODO: How to assert status was 200 and data sent was { hello: 'world' }?
})
})
Как я могу подтвердить статус 200 и данные { hello: 'world' }
?
Обновление Это работает, но я не знаю, если это ужасная идея.
Обновлен тест
'use strict'
const { expect } = require('chai')
const helloWorld = require('./helloWorld')
describe('#helloWorld', () => {
it('should return 200', () => {
const req = {
}
const res = {
_status: null,
_json: null,
status: function (code) {
this._status = code
return this
},
send: function (json) {
this._json = json
return this
}
}
const next = () => {}
helloWorld(req, res, next)
expect(res._status).to.equal(200)
expect(res._json.hello).to.equal('world')
})
})