如何断言process.stderr输出?

evf*_*qcg 3 javascript testing io tdd node.js

我正在构建一个小命令行工具,我遇到了测试问题.

如何测试当前进程写的"omg" stderr

process.stderr.write("omg")
Run Code Online (Sandbox Code Playgroud)

JP *_*son 5

如果你还没有安装Mocha:

npm install -g mocha
Run Code Online (Sandbox Code Playgroud)

shouldpass.js:

process.stderr.write('omg')
Run Code Online (Sandbox Code Playgroud)

shouldfail.js:

process.stdout.write('not omg on stderr')
Run Code Online (Sandbox Code Playgroud)

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()    
    })
  })    
})
Run Code Online (Sandbox Code Playgroud)

跑步:

mocha test.js
Run Code Online (Sandbox Code Playgroud)