Необработанные отклонения в тестах мокко из нативного кода - PullRequest
0 голосов
/ 09 октября 2018

Я получаю сообщения «необработанное отклонение» в тестах мокко, но я не знаю, каков точный источник проблемы, поскольку это происходит асинхронно.

Я знаю, что могу добавить прослушиватель событий для глобального события unhandledRejection, например:

process.on('unhandledRejection', function(reason)  {
     console.error(reason);
     process.exit(1);
});

, но это не очень помогает, поскольку трассировка выглядит следующим образом:

{ Error: ENOENT: no such file or directory, open '/tmp/testfile.json'
    at Error (native)
  cause: 
   { Error: ENOENT: no such file or directory, open '/tmp/testfile.json'
       at Error (native)
     errno: -2,
     code: 'ENOENT',
     syscall: 'open',
     path: '/tmp/testfile.json' },
  isOperational: true,
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path: '/tmp/testfile.json' }

Проблема та же, что и у встроенного обработчика узла.Никакой обратной трассировки.

Очевидно, я не получаю правильную обратную трассировку, потому что отклонение происходит в собственном модуле fs.Если я попытаюсь выполнить только тест, где происходит эта трассировка, то этого не произойдет вообще.Вероятно, это из-за безудержного обещания, которое было сделано где-то «раньше».Указанный / tmp / path не существует нигде в тестовом коде или фактическом коде реализации.Testfile.json существует, но не по этому пути.

Я запускаю mocha 3.5.3 с узлом 6.5.0.

Поэтому возникает вопрос: как сузиться, чтобы найтипроблемный код?

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Я не уверен, что это поможет, но вы также можете получить Promise в качестве аргумента от слушателя unhandledRejection, чтобы, возможно, получить более полезный вывод.Документы здесь

process.on('unhandledRejection', (reason, p) => {
  console.log('Unhandled Rejection at:', p, 'reason:', reason);
  // application specific logging, throwing an error, or other logic here
});
0 голосов
/ 09 октября 2018

Один общий подход.Разделите проблему следующим образом:

  1. переместите некоторые файлы наборов тестов в отдельный каталог, чтобы они не выполнялись во время тестов
  2. Rerun mocha
  3. Наблюдайте, если произошел сбойсообщение сохраняется
  4. Если да, продолжайте перемещать больше файлов.Если нет, проблемный файл был одним из последних перемещенных.

Затем продолжите деление пополам конкретного файла, вызывающего проблему.Прокомментируйте код до тех пор, пока проблемный код не будет выполнен.

...