Javascript 在JEST测试中隐藏控制台日志
一般来说,我不太会开玩笑,也不太会测试,但我很难弄明白以下几点。 我有以下脚本,它是CLI工具的一部分 我想在测试时停止微调器输出 我试过间谍/模拟,但没用Javascript 在JEST测试中隐藏控制台日志,javascript,node.js,testing,jestjs,Javascript,Node.js,Testing,Jestjs,一般来说,我不太会开玩笑,也不太会测试,但我很难弄明白以下几点。 我有以下脚本,它是CLI工具的一部分 我想在测试时停止微调器输出 我试过间谍/模拟,但没用 const ora = require('ora'); const spinner = new ora(); const chalk = require('chalk'); const fs = require('fs'); module.exports = path => new Promise((resolve, rejec
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',()=>{
返回jest.fn().mockImplementation(()=>{
返回{
开始:()=>{},
失败:()=>{},
成功:()=>{}
};
});
});
谢谢,即将标记正确的回复,尽管它似乎没有自动模拟其方法。这可能是因为在我的代码中使用了ora实例吗?不管怎样,你给我指出了正确的方向,我模仿了我正在使用的方法。@BenS我很好奇为什么它不起作用,因为库实际上导出的是一个而不是一个类