上一篇 - Macaca 支持 Node.js, Java 和 Python
介绍一下如何测试命令行工具,注意:这里说的是命令行的单元测试,不是 UI 单元测试。
command-line-test
是刚出炉的一款专门测试命令行工具,她只提供进程操作最初级的封装,其余你的测试框架、风格、断言库等都可以与她相兼容使用。
开源地址: command-line-test
拿 Macaca
命令行客户端做为例子,我们需要知道本次改动是否影响到了 Macaca
工具的基础命令,例如查看当前 Macaca
命令行工具版本:
$ macaca -v
正确情况下会输出1.1.3
,与当前项目配置相一致,而且不会产生错误和标准错误,只有标准输出,所以可以用如下方式断言。
const path = require('path');
const EOL = require('os').EOL;
const CliTest = require('command-line-test');
const pkg = require('../package');
const binFile = path.resolve(pkg.bin.macaca);
describe('macaca command-line test', function() {
it('`macaca -v` should be ok', function *() {
var cliTest = new CliTest();
var res = yield cliTest.execFile(binFile, ['-v'], {});
res.stdout.should.containEql(pkg.version);
});
it('`macaca -h` should be ok', function *() {
var cliTest = new CliTest();
var res = yield cliTest.execFile(binFile, ['-h'], {});
var lines = res.stdout.trim().split(EOL);
lines[0].should.be.equal(pkg.description);
});
it('`macaca` should be ok', function *() {
var cliTest = new CliTest();
var res = yield cliTest.execFile(binFile, [], {});
var lines = res.stdout.trim().split(EOL);
lines[0].should.be.equal(pkg.description);
});
it('`macaca run --verbose` should be ok', function *() {
var cliTest = new CliTest();
var res = yield cliTest.spawn(binFile, ['run', '--verbose']);
res.stdout.should.containEql('webdriver sdk launched');
});
});
这样,macaca -v
, macaca -h
, macaca run
等基础的命令就不会出现低级错误,导致产品不可用,通过仔细分析和完善用例,可以达到很高的单元覆盖率。示例除了 Macaca
命令行,还有其他几个命令行工具的示例做为参考。
欢迎讨论,互相学习。
微博: http://weibo.com/xudafeng
Github: https://github.com/xudafeng