Как увеличить покрытие кода для асинхронных операций в Nodejs, используя Sonar, Jest и Supertest - PullRequest
0 голосов
/ 19 января 2020

Как мы можем увеличить покрытие кода для асинхронных операций в Nodejs, используя Sonar, Jest и Supertest. Для следующего кода я написал тестовый пример и проверил статус как 200.

api.post('/activate', async (req, res, next) => {
  const { action, requestId } = req.body
  DeviceManager.ActivateDevices(req.body) //call device activation
  res.send({ requestId, message: 'Request is on processing', action, status: Config.STATUS.PENDING })
  next()
})

  test('should activate a device', async done => {
    const res = await request(app)
      .post('/api/v1/devices/activate')
      .send({
        mac:'YUINH6767'
        requestId: '791',
      })
    expect(res.statusCode).toEqual(200)
    done()
  })

Здесь утверждение DeviceManager.ActivateDevices(req.body) является асинхронным c действием. Это действие будет выполнено в какой-то момент, например, через 1 мин. В этом случае, как написать правильный тестовый пример, чтобы получить хорошее покрытие кода.

1 Ответ

0 голосов
/ 19 января 2020

Проблема в том, что вы не ожидаете завершения асинхронной операции c. Вам следует дождаться вызова asyn c перед отправкой ответа пользователю. что-то вроде

api.post('/activate', async (req, res, next) => {
  const { action, requestId } = req.body
  await DeviceManager.ActivateDevices(req.body) //call device activation
  res.send({ requestId, message: 'Request is on processing', action, status: Config.STATUS.PENDING })
  next()
})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...