如何在JEST中隐藏console.log行

时间:2019-06-04 17:30:25

标签: jestjs console.log

我正在根据请求进行开玩笑的测试

this.funcao()

这很奇怪,因为在终端中,开玩笑在输出中显示了console.log行:

describe("GET /user ", () => {
    test("It should respond with a array of users", done => {
        return request(url, (err, res, body) => {
            if (err) {
                console.log(err)
            } else {
                console.log("GET on " + url);
                body = JSON.parse(body);
                expect(body.length).toBeGreaterThan(0);
                done();
            }
        })
    })
});

我需要隐藏行

 > jest --detectOpenHandles

 PASS  test/modules/user.test.js
  GET /user
    √ It should respond with a array of users (1174ms)

  console.log test/modules/user.test.js:18
    GET on https://xpto/api/user

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        5.79s
Ran all test suites.

5 个答案:

答案 0 :(得分:2)

如果这是您编写的测试,为什么还要记录错误?您可以为此依赖开玩笑的断言。
如果没有其他解决方案,则可以像下面这样存根console.log函数:

const log = console.log;
console.log = () => {};

/** Test logic goes here **/

console.log = log; // Return things to normal so other tests aren't affected. 

答案 1 :(得分:2)

您可以使用jest.spyOn模拟console方法:

const spy = jest.spyOn(console,'warn').mockReturnValue()

// after you are done with the test, restore the console
spy.mockRestore()

您可以创建一个实用程序函数来模拟console

function mockConsole(method = 'warn', value){
    return jest.spyOn(console,method).mockReturnValue(value).mockRestore
}

const restore = mockConsole() //mock it

// later when you are done
restore() // unmock it 

此外,您可以将以上代码答案与jest.beforeEach结合使用,以自动恢复console

beforeEach(()=>{
    // beware that this will restore all mocks, not just the console mock
    jest.restoreAllMocks()
})

答案 2 :(得分:1)

您需要使用process.stdout.write创建自己的日志功能,或使用它代替console.log,因为在所有控制台功能中都存在玩笑。

很早以前,我一直在尝试将TypeType一个我真正喜欢的实用程序带入Typescript;测试中的GivenWhenThen注释和我遇到了与您相同的问题。我不明白为什么jest打印这些“ consol.log +行”,这没有意义,因为您可以使用Crt + Find轻松找到它们,并且没有选项可以使用--silent将其关闭和--verbose = false选项(当然,静默功能将起作用,但它将删除所有日志,这有什么用)。

最后,我想到了:

const colors = require('colors');

const testLog = (str : string) => process.stdout.write(str)

export const Given = (givenMsg: string) => testLog(`\n+ Given ${givenMsg}\n`)
export const When = (whenMsg: string) => testLog(`+ When ${whenMsg}\n`)
export const Then = (thenMsg: string) => testLog(`+ Then ${thenMsg}\n`)
export const And = (andMsg: string) => testLog(`- And ${andMsg}\n`)

export const testCase = (description: string, testFunction: Function) => it (description, () => {
    testLog(colors.yellow(`\n\nTest: ${description}\n`))
    testFunction()
    testLog('\n')
})

看起来像这样:

given when then typescript

答案 3 :(得分:1)

您可以尝试使用-silent 参数来开玩笑。

在package.json中,使用两个脚本:

python

答案 4 :(得分:0)

您可以像这样用“普通”控制台替换 ​​Jest 的 console 实现:

const jestConsole = console;

beforeEach(() => {
  global.console = require('console');
});

afterEach(() => {
  global.console = jestConsole;
});