如何查看Jest中的堆栈跟踪/错误原因?

时间:2020-07-14 14:15:52

标签: node.js testing promise jestjs

我正在尝试调试nodeJS应用。 我有一些代码会导致错误,变量未定义。 当我正常运行代码时,错误非常明显并且很容易找到:

没有玩笑:

➜  server git:(dc/build) ✗ node test/runner.js
/Users/dc/dev/exiteer/xbot/server/src/mup/Story.js:24
    Logger.logObj('loaded story', {name: doc.name})
                                         ^

ReferenceError: doc is not defined
    at Story.reload (/Users/dc/dev/exiteer/xbot/server/src/mup/Story.js:24:42)
    at Game.reload (/Users/dc/dev/exiteer/xbot/server/src/mup/Game.js:48:16)
    at Object.<anonymous> (/Users/dc/dev/exiteer/xbot/server/test/runner.js:4:10)

甜,我可以解决它。

现在,Jest有一些不错的工具来编写测试,所以我想尝试一下。

但是错误似乎无法找到:

➜  server git:(dc/build) ✗ npm run jest

> cbg@0.1.0 jest /Users/dc/dev/exiteer/xbot/server
> jest

 PASS  src/index.test.js
(node:23114) UnhandledPromiseRejectionWarning: ReferenceError: doc is not defined
(Use `node --trace-warnings ...` to show where the warning was created)
(node:23114) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:23114) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
 FAIL  src/mup/Actor.test.js
  ● Console

    console.log
      actors undefined

      at Object.<anonymous> (src/mup/Actor.test.js:9:13)

  ● Game.js › can load a story

    expect(received).toHaveLength(expected)

    Matcher error: received value must have a length property whose value must be a number

    Received has value: undefined

       8 | 
       9 |     console.log('actors', game.story.room.name.actors)
    > 10 |     expect(game.story.room.actors).toHaveLength(1);
         |                                    ^
      11 |     const actor = game.story.room.actors[0]
      12 |     const reply = actor.sayTo('hi')
      13 |     expect(reply).toBe('hi back from Sid')

      at Object.<anonymous> (src/mup/Actor.test.js:10:36)

这告诉我测试在哪里失败,但是我更想知道实际错误在哪里。测试不是这里的最终目标,工作的应用程序是最终目标。

在Google上搜索时发现并尝试了此操作,但它给出了相同的错误消息。

node --trace-warnings node_modules/.bin/jest --no-cache

➜  server git:(dc/build) ✗ npm run test

> cbg@0.1.0 test /Users/dc/dev/exiteer/xbot/server
> node --trace-warnings node_modules/.bin/jest --no-cache

(node:23263) UnhandledPromiseRejectionWarning: ReferenceError: doc is not defined
    at emitUnhandledRejectionWarning (internal/process/promises.js:151:15)
    at processPromiseRejections (internal/process/promises.js:211:11)
    at processTicksAndRejections (internal/process/task_queues.js:98:32)
(node:23263) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)

这会提供更多信息,但

    at emitUnhandledRejectionWarning (internal/process/promises.js:151:15)
    at processPromiseRejections (internal/process/promises.js:211:11)
    at processTicksAndRejections (internal/process/task_queues.js:98:32)

这对调试我的代码不是很有帮助。

Jest似乎也吞并了所有console.log,好像它正在尽力使调试尽可能地痛苦。当您的环境甚至没有记录时,这就是真正的WTF时刻。

0 个答案:

没有答案