Как получить возвращаемое значение возвращаемой функции next внутри блока then с шуткой в ​​node.js с express? - PullRequest
0 голосов
/ 19 апреля 2020

Я только начинаю изучать юнит-тестирование и столкнулся с проблемой, которую не понимаю.

Это часть моего express -контроллера, который я хочу протестировать:

exports.signupUser = async (req, res, next) => {
  ...

  await User.findOne({ email : req.body.email }).exec().then(user => {
    if (user && !user.doubleoptin) {
      return next([{ status : 422, value : req.body.email, reason : 'EMAIL_NOT_CONFIRMED' }])
    }
  }).catch(err => {
    return next([err])
  })

  ...
}

Я хочу проверить случай, когда пользователь зарегистрировался, но пока не сделал двойной выбор. Это тест, который я написал для этого:

...

it('should throw an error if user exists but did not doubleoptin', async () => {
    const req = {
      body : {
        email : 'test@test.de'
      }
    }
    const next = errArray => errArray

    await userControllerClientApi.signupUser(req, null, next).then(err => {
      console.log(err)
      expect(err[0].status).toBe(422)
      expect(err[0].value).toBe(req.body.email)
      expect(err[0].reason).toBe('EMAIL_NOT_CONFIRMED')
    })
  })

...

Пользователь существует, поэтому я попал в блок if (я проверил консольные журналы, я действительно попал туда), но мой тест не получает возвращаемого значения функции next, он всегда завершается неудачно с:

TypeError: Cannot read property '0' of undefined

в expect(err[0].status).toBe(422) состоянии, потому что err равно undefined.

Я использую ту же логику c в другом тесте, и она работает там, но я предполагаю, что это как-то связано с возвращением из блока then, я прав?

Что было бы лучше проверить такой случай с помощью jest?

EDIT:

Я только что узнал, что выполнение кода на самом деле не останавливается при возврате next(...) во время testrun, поэтому он просто выполняет остальную часть кода, который следует после проверки

...