Jest 和 console.dir 不显示整个对象

Car*_*ton 5 javascript testing typescript jestjs console.dir

我试图在 Jest 测试中显示错误,但它不会显示所有级别。

import util from 'util'

describe('Module', () => {
  it('should show all levels WITHOUT util', () => {
    const large = {
      level1: {
        level2: {
          message: 'At level 2!',
          level3: {
            message: 'At level 3!',
            level4: {
              message: 'At level 4!',
              level5: {
                message: 'At level 5!',
              },
            },
          },
        },
      },
    }
    console.dir(large, { depth: 5 })
  })

  it('should show all levels with util', () => {
    const large = {
      level1: {
        level2: {
          message: 'At level 2!',
          level3: {
            message: 'At level 3!',
            level4: {
              message: 'At level 4!',
              level5: {
                message: 'At level 5!',
              },
            },
          },
        },
      },
    }
    console.dir(util.inspect(large, { depth: 5 }))
  })
})
Run Code Online (Sandbox Code Playgroud)

这给了我以下结果

    { level1: { level2: { message: 'At level 2!', level3: [Object] } } } { depth: 5 }

    { level1:
       { level2:
          { message: 'At level 2!',
            level3:
             { message: 'At level 3!',
               level4:
                { message: 'At level 4!', level5: { message: 'At level 5!' } } } } } }
Run Code Online (Sandbox Code Playgroud)

我的印象是 console.dir 应该已经为我做到了这一点,但是我[Object]在深度 2 之后得到的第一个测试

我什至在 Jest 之外创建了一个简单的测试,它似乎按 console.dir 的预期工作,任何人都可以解释为什么会发生这种情况吗?Jest 是否会使用其自己的默认深度或其他内容覆盖 dir 的行为方式?

const large = {
  level1: {
    level2: {
      message: 'At level 2!',
      level3: {
        message: 'At level 3!',
        level4: {
          message: 'At level 4!',
          level5: {
            message: 'At level 5!',
          },
        },
      },
    },
  },
}
console.dir(large, { depth: 5 })
Run Code Online (Sandbox Code Playgroud)

结果是...

{ level1:
   { level2:
      { message: 'At level 2!',
        level3:
         { message: 'At level 3!',
           level4:
            { message: 'At level 4!', level5: { message: 'At level 5!' } } } } } }
Run Code Online (Sandbox Code Playgroud)

xam*_*ore 1

太棒了;在当前的 Jest 实现中,第二个参数console.dir(value, options)被忽略。


consoleJest通过自己的实现重新定义了全局。在BufferedConsole和中CustomConsole,您可能会发现该dir方法如下所示:

dir(firstArg: unknown, ...args: Array<unknown>): void {
  this._log('dir', format(firstArg, ...args));
}
Run Code Online (Sandbox Code Playgroud)

很难找到该format函数的确切定义,但 Github 建议以下实现:

在此输入图像描述

export const format = (value: unknown): string =>
  typeof value === 'function'
    ? value.toString()
    : prettyFormat(value, {min: true});
Run Code Online (Sandbox Code Playgroud)

prettyFormatmaxDepth一个选项在所有 3 个实现中都没有传递。