使用 another answer 中概述的技术我能够为 --help
开关编写测试:
const expect = require('chai').expect
const exec = require('child_process').exec
const cli = './cli.js'
describe('help', function () {
var capturedStdout
var capturedStderr
// http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
// var cmd = cli + " --help 1>&2"
var cmd = cli + ' --help'
before(function (done) {
exec(cmd, function (error, stdout, stderr) {
if (error) done(error)
capturedStdout = stdout
capturedStderr = stderr
done()
})
})
it('should succeed', () => {
expect(capturedStderr).be.empty
})
it('should have some usage instructions', () => {
expect(capturedStdout).to.match(/Usage: words \[options] \[pattern]/)
})
it('should show a sematic version number', () => {
// http://rubular.com/r/lTC1wu95jq
expect(capturedStdout).to.match(/v\d+\.\d+\.\d+/)
})
it('should have some examples', () => {
expect(capturedStdout).to.match(/Examples:/)
})
})
我遇到了两个问题:
- 一个开关有 45 行。
- 如果我为不同的开关添加另一个
describe
block ,例如--version
,那么我会收到以下错误:Error: done() called多次
解决方案是将测试移动到另一个文件中。
有没有更好的方法来做我想做的事?我想要做的就是在测试 stdout、stderr 和退出状态时重复运行我的可执行文件。
最佳答案
不要回答你的整个问题,但你缺少返回声明
before(function (done) {
exec(cmd, function (error, stdout, stderr) {
if (error) {
return done(error)
}
关于node.js - 捕获 stdout 和 stderr 以测试 Node.js CLI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41949722/