上一篇 - 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

下一篇 - 如何选择其他测试框架


↙↙↙阅读原文可查看相关链接,并与作者交流