2015-10-05 35 views
0

我的腳本正在使用process.stdout.write來生成輸出。它需要使用process.stdout.write而不是console.log,因爲console.log強制EOL如何讓process.stdout.write在摩卡環境中工作?

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

打印:

process.stdout.write 
    ✓ prints "foo" 

1 passing (5ms) 

注意, 「foo」 的沒有被打印。

回答

0

process.stdout.writemocha衝突打印報告的內部邏輯。

要獲得的process.stdout.write的輸出覆蓋process.stdout.write,緩衝輸入以及使用console.error打印輸出(當process.stdout.write被覆蓋console.log將無法​​正常工作),例如

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()); 
     }); 
    }); 
}); 
相關問題