3

小さなコマンドラインツールを作成していますが、テストで問題が発生しました。

現在のプロセスが「omg」を書き込んだことをどのようにテストできstderrますか?

process.stderr.write("omg")
4

2 に答える 2

5

まだインストールしていない場合は Mocha をインストールします。

npm install -g mocha

shouldpass.js:

process.stderr.write('omg')

shouldfail.js:

process.stdout.write('not omg on stderr')

test.js:

var exec = require('child_process').exec
  , assert = require('assert')

describe('run tests', function(){
  it('should pass', function(done) {
    exec('node ./shouldpass.js', function(err, stdout, stderr) {
      assert.equal(stderr, 'omg')
      done()    
    })
  })

  it('should fail', function(done) {
    exec('node ./shouldfail.js', function(err, stdout, stderr) {
      assert.equal(stderr, 'omg')
      done()    
    })
  })    
})

走る:

mocha test.js
于 2013-01-18T19:50:45.240 に答える
0

を一時的に上書きし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());
        });
    });
});
于 2015-10-05T09:44:03.143 に答える