Проблема с запуском Jest с использованием CLS с асинхронными функциями

#javascript #async-await #jestjs

#javascript #async-ожидание #jestjs

Вопрос:

Кажется, я не могу заставить CLS работать с Jest.

Следующий код:

 export {}
const { promises: fs } = require('fs')

describe('CLS tests', () => {
  test('Can test CLS', async () => {
    var createNamespace = require('cls-hooked').createNamespace
    var session = createNamespace('session')
    session.run(async function () {
      await fs.readFile('package.json', 'utf-8')
      console.log('I cant log this')
    })
  })
})
  

Приводит к следующей ошибке:

Не удается войти в систему после завершения тестов. Вы забыли дождаться чего-то асинхронного в вашем тесте? Попытался войти «Я не могу это зарегистрировать».

Почему мой тест, похоже, завершается раньше?

Ответ №1:

Возможно, вам нужно абстрагироваться от asynchronous операций. Я попробовал это в своей системе, и это работает.

 const {promises: fs} = require('fs')

const runSession = () => new Promise((resolve, reject) => {
  const createNamespace = require('cls-hooked').createNamespace
  const session = createNamespace('session')
  session.run(() => {
    fs.readFile('package.json', 'utf-8')
        .then(resolve)
  })
})

describe('CLS tests', () => {
  test('Can test CLS', async () => {
    const result = await runSession()
    console.log('hello')
    console.log(result)
    expect(result).toBeTruthy()
    console.log('after expect...')
  })
})

  

введите описание изображения здесь

Удачи…

Комментарии:

1. Приветствую @JamieAlexander 🙂 . Если это отвечает на ваш вопрос; пожалуйста accept , ответьте, нажав на галочку с левой стороны в верхней части ответа.