首页 > 解决方案 > 在 JEST 测试中隐藏控制台日志

问题描述

我是 JEST 和一般测试的新手,无法弄清楚以下内容。我有以下脚本,它是 CLI 工具的一部分。

我想在测试时停止微调器输出。

我尝试过 spyOn/mock,但无济于事。

const ora = require('ora');
const spinner = new ora();
const chalk = require('chalk');
const fs = require('fs');

module.exports = path =>
  new Promise((resolve, reject) => {
    spinner.text = chalk.blue('Creating directory...');
    spinner.start();
    fs.mkdir(path, err => {
      if (!err) {
        spinner.succeed(chalk.bgGreen('Directory created\n'));
        resolve(true);
      } else {
        spinner.fail(chalk.bgRed(`Directory already exists: ${path}`));
        reject(err);
      }
    });
  });

这是我的测试:

const createDir = require('./utils/createDir');
const fs = require('fs');

describe('createDir function', () => {
  const folders = {
    base: './.test',
    fail: './.test/fail',
    success: './.test/success'
  };

  beforeAll(() => {
    fs.mkdirSync(folders.fail, { recursive: true });
  });

  afterAll(() => {
    fs.rmdirSync(folders.base, { recursive: true });
  });

  it('creates the directory', async () => {
    await expect(createDir(folders.success)).resolves.toBe(true);
  });

  it('fails if directory exists', async () => {
    await expect(createDir(folders.fail)).rejects.toThrow();
  });
});

标签: javascriptnode.jstestingjestjs

解决方案


你应该可以添加

jest.mock('ora')

在测试开始时。它将自动模拟整个库,用jest.fn()(没有任何实现)替换每个方法,因此来自实现的调用对输出没有影响。

本编辑:

功能模拟原来是这样的:

jest.mock('ora', () => {
  return jest.fn().mockImplementation(() => {
    return {
      start: () => {},
      fail: () => {},
      succeed: () => {}
    };
  });
});

推荐阅读