javascript - 在 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();
});
});
解决方案
你应该可以添加
jest.mock('ora')
在测试开始时。它将自动模拟整个库,用jest.fn()
(没有任何实现)替换每个方法,因此来自实现的调用对输出没有影响。
本编辑:
功能模拟原来是这样的:
jest.mock('ora', () => {
return jest.fn().mockImplementation(() => {
return {
start: () => {},
fail: () => {},
succeed: () => {}
};
});
});
推荐阅读
- ios - 在 Alamofire 请求中发布和获取参数
- image - 如何根据棱柱特征对图像进行分组?
- sql-server - 解密由 SQL Server 使用 AES 256 手动加密的值
- java - java.lang.ArrayIndexOutOfBoundsException:发生错误
- azure - 在 Azure Service Fabric 应用程序中存储非键值参数的位置
- linux - 为什么不推荐使用 linux 内核信号量 down() 函数?
- javascript - HTML 使用反斜杠转义字符串
- android - 带有意图的 startActivity 导致黑屏
- node.js - 尝试运行 discord bot 时出错“node_sqlite3.node 不是有效的 Win32 应用程序”。
- scatter-plot - dc.js 散点图对于大量数据来说很慢 - 任何替代实现?