【问题标题】:Jest and console.dir not displaying entire objectJest 和 console.dir 不显示整个对象
【发布时间】:2020-05-13 01:03:11
【问题描述】:

我试图在 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 }))
  })
})

这给了我以下结果

    { 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!' } } } } } }

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

我什至在 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 })

结果...

{ level1:
   { level2:
      { message: 'At level 2!',
        level3:
         { message: 'At level 3!',
           level4:
            { message: 'At level 4!', level5: { message: 'At level 5!' } } } } } }

【问题讨论】:

    标签: javascript typescript testing jestjs console.dir


    【解决方案1】:

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


    Jest 用自己的实现重新定义了全局 console。在BufferedConsoleCustomConsole 中,您可能会发现dir 方法如下所示:

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

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

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

    prettyFormat 具有 maxDepth 选项,但未在所有 3 个实现中传递。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-28
      • 2020-03-24
      • 1970-01-01
      • 2016-06-10
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 2019-05-11
      相关资源
      最近更新 更多