如何使process.stdout.write在mocha环境下工作



我的脚本使用process.stdout.write生成输出。它要求使用process.stdout.write而不是console.log,因为console.log强制EOL

describe('process.stdout.write', () => {
    it('prints "foo"', () => {
        process.stdout.write('foo');
    });
});

打印:

process.stdout.write
    ✓ prints "foo"
1 passing (5ms)

注意"foo"没有被打印。

process.stdout.writemocha打印报表的内部逻辑冲突。

要获得process.stdout.write的输出,覆盖process.stdout.write,缓冲输入并使用console.error打印输出(console.log在覆盖process.stdout.write时不起作用),例如

describe('process.stdout', () => {
    let processStdoutWrite,
        processStdoutWriteBuffer,
        overwriteProcessStdoutWrite,
        resetProcessStdoudWrite,
        getProcessStdoutBuffer;
    /**
     * @var {function} Reference to the original process.stdout.write function.
     */
    processStdoutWrite = process.stdout.write;
    /**
     * @returns {undefined}
     */
    overwriteProcessStdoutWrite = () => {
        processStdoutWriteBuffer = '';
        process.stdout.write = (text) => {
            processStdoutWriteBuffer += text;
        };
    };
    /**
     * @returns {string}
     */
    getProcessStdoutBuffer = () => {
        return processStdoutWriteBuffer;
    };
    /**
     * @returns {undefined}
     */
    resetProcessStdoudWrite = () => {
        process.stdout.write = processStdoutWrite;
    };
    beforeEach(() => {
        overwriteProcessStdoutWrite();
    });
    afterEach(() => {
        resetProcessStdoudWrite();
    });
    describe('.write()', () => {
        it('prints "foo"', () => {
            process.stdout.write('foo');
            process.stdout.write('bar');
            console.error(getProcessStdoutBuffer());
        });
    });
});

最新更新