How to suppress application logging messages from a node.js application when running unit tests?

前端 未结 4 2050
春和景丽
春和景丽 2020-12-13 08:37

While unit-testing my node.js application (which is basically a REST backend) using mocha and supertest, I need only the test-specific message on the screen, but the stdout

4条回答
  •  無奈伤痛
    2020-12-13 08:48

    Here's a pretty simple solution that uses SinonJS's test stubs to suppress all console.log/info/warn/error statements before running your tests.

    // my-method.js
    
    export function myMethod() {
        console.log(`I'm about to return true`)
        return true
    }
    

    // my-method.test.js
    
    import {describe, it, before} from 'mocha'
    import chai from 'chai'
    import sinon from 'sinon'
    import chalk from 'chalk'
    import {myMethod} from './my-method.js'
    
    const expect = chai.expect
    
    describe(chalk.underline('My Test Group'), () => {
    
        before(() => {
            sinon.stub(console, 'log')  // disable console.log
            sinon.stub(console, 'info')  // disable console.info
            sinon.stub(console, 'warn')  // disable console.warn
            sinon.stub(console, 'error')  // disable console.error
        })
    
        describe('myMethod', () => {
            it('should return true', () => {
                expect(myMethod()).to.be.true  // without printing to the console
            })
        })
    })
    

    // output
    
    My Test Group
      myMethod
        ✓ should return true
    

提交回复
热议问题