Как определить маршрутизацию get () в приложении expressJS с намерением выполнить простое модульное тестирование?
Итак, в качестве первого шага я переместил функцию get()
в собственный файл:
index.js
const express = require('express')
const socketIo = require('socket.io')
const Gpio = require('pigpio').Gpio
const app = express()
const server = http.createServer(app)
const io = socketIo(server)
const setStatus = require('./lib/setStatus.js')
app.locals['target1'] = new Gpio(1, { mode: Gpio.OUTPUT })
app.get('/set-status', setStatus(app, io))
lib / setStatus.js
const getStatus = require('./getStatus.js')
module.exports = (app, io) => {
return (req, res) => {
const { id, value } = req.query // id is in this example '1'
req.app.locals['target' + id].pwmWrite(value))
getStatus(app, io)
res.send({ value }) // don't need this
}
}
lib / getStatus.js
const pins = require('../config.js').pins
module.exports = async (app, socket) => {
const res = []
pins.map((p, index) => {
res.push(app.locals['target' + (index + 1)].getPwmDutyCycle())
})
socket.emit('gpioStatus', res)
}
Итак, во-первых, я не совсем уверен, правильно ли я разделил этот код - думал о проведении модульного тестирования.
Для меня единственное, что имеетсделать это путем вызова /set-status?id=1&value=50
- это вызвать pwmWrite()
для (я предполагаю) объекта, который определяется new Gpio
и хранится в locals
файла expressJS.
И для второго: Еслиэто должен быть правильный путь, я не понимаю, как написать модульный тест jestJS, чтобы проверить, был ли вызван pwmWrite
, который находится внутри асинхронной функции.
Это моя попытка, но я могуне проверять внутренний вызов pwmWrite:
test('should call pwmWrite() and getStatus()', async () => {
const app = {}
const io = { emit: jest.fn() }
const req = {
app: {
locals: {
target1: { pwmWrite: jest.fn() }
}
}
}
}
expect.assertions(1)
expect(req.app.locals.target1.pwmWrite).toHaveBeenCalled()
await expect(getStatus(app, io)).toHaveBeenCalled()
})