Как я могу вызвать собственный метод console.log в тесте Jest?

Jest переопределяет собственный метод console.log для сбора результатов регистрации для каждого теста. Однако это может затруднить работу с отладчиком, поскольку ничего не будет напечатано.

Есть ли способ вызвать нативный метод console.log внутри теста Jest?

0 ответов

Вы можете достичь этого, передав пользовательский TestEnvironment и пользовательский Reporter (протестировано с помощью jest@24.7.1):

// debugTestEnv.js

const NodeEnvironment = require('jest-environment-node')
const console = require('console')

const vanillaConsole = new console.Console({ stdout: process.stdout, stderr: process.stderr })

class DebugTestEnv extends NodeEnvironment {
  async setup() {
    await super.setup()
    this.prevConsole = this.global.console
    this.global.console = vanillaConsole
  }

  async teardown() {
    this.global.console = this.prevConsole
    await super.teardown()
  }
}

module.exports = DebugTestEnv

// debugReporter.js

// In Jest, the DefaultEnvironment constructor changes `process.stdout` and `process.stderr`
// That's why we pass a custom reporter to Jest (we use Jest's BaseReporter for this purpose)
module.exports = require('@jest/reporters/build/base_reporter').default

затем запустить определенный тест:

jest --runInBand --no-cache --watchAll=false -t="testNameToDebug" --env="./path/to/debugTestEnv.js" --reporters="./path/to/debugReporter.js"

Это работает также и с create-реагировать-приложение, просто замените jest с участием react-scripts test,

Другие вопросы по тегам