跳到主要内容
CNode

使用 coffee 来测试 cli 命令行工具

精华分享
Ffengmk2发布于 11 年前最后回复 11 年前
12115700
目录 · 4 个章节

npm 团队最近也在大力推广使用 node 来开发 cli 命令行工具,Building a simple command line tool with npm

可是,我们需要对 cli 工具写自动化测试吗?

  • 不需要?那怎么保证质量?
  • 需要?那怎么写自动化测试呢?

显而易见,我们都是有追求的程序员,当然要写测试啦!

本文将介绍基于由 @popomore 开发的 coffee 测试辅助工具,高效愉快地帮我们写测试代码。

前戏

coffee 的 api 设计,来源自非常出名的 http app 测试工具 supertest,我想你应该有使用过吧。

我们先来看看 supertest 是如何帮助我们愉快地编写单元测试代码的:

describe('GET /users', function(){
  it('respond with json', function(done){
    var app = express();
    app.get('/user', function(req, res){
      res.send(200, { name: 'tobi' });
    });
    request(app)
      .get('/user')
      .expect('Content-Type', /json/)
      .expect({
        name: 'tobi'
      })
      .expect(200, done);
  });
});

Wooooo,原来写 express 应用的单元测试这么简单啊!再对比看看自己写的单元测试代码,是不是简单很多了?

高潮

好了,前戏过后,我们到高潮部分,看看 coffee 又是如何帮助我们愉快地编写测试代码的。

例如我需要对非常著名的 cat 命令行工具进行测试:

var coffee = require('coffee');

describe('cat', function() {
  it('should concat input', function(done) {
    coffee.spawn('cat')
      .write('1') // 往标准输入写入1和2
      .write('2')
      .expect('stdout', '12') // 测试 cat 原样将1和2输出
      .expect('code', 0) // 进程退出码为 0
      .end(done);
  });
});

通过 mocha 运行它,pass!

文章图片

如何出错了,会有什么提示呢?我们修改一下测试代码:

it('should concat input', function(done) {
  coffee.spawn('cat')
    .write('foo')
    .write('bar')
    .expect('stdout', 'foo!!!')
    .expect('code', 0)
    .end(done);
});

文章图片

会告知 stdout 输出没有满足期望了!

落幕

cat 例子太简单了?这么想就对了,说明你心动了,想写测试代码了! 更多详细的例子,可以看看 coffee 本身的单元测试,它就是最好的示例代码!

有爱 💗

希望本文对你有用 :)

原文链接

查看回复

回复 (12)

B
booxood#1211 年前

好棒~ 命令行工具也可以方便的测试~

A
alsotang#1111 年前
引用 fengmk2@alsotang

@fengmk2 。。。。看来又要去找个 markdown 库了

C
coolicer#1011 年前

点赞

D
DoubleSpout#911 年前

单元测试好东西,不写上线心里没底~

S
soliury#811 年前

好东西 自豪地采用 CNodeJS ionic

F
fengmk2#711 年前

untitled1.png @alsotang

C
chapgaga#611 年前

楼主就是popmore么?

D
dd1994#511 年前

不科学,为何 star 数这么少。

D
dd1994#411 年前

这个太帅了!

M
magicdawn#311 年前

我给起的名字 DSTT(Domain Specific Test Tool) 居然搜不到东西!

I
i5ting#211 年前
引用 fengmk2@alsotang 竟然不支持引用。。。

@fengmk2 误会了。。。。。我以为是coffeescript

之前手动模拟终端填入字符,还是比较痛苦的,这东西很好

F
fengmk2#111 年前

@alsotang 竟然不支持引用。。。

参与回复

登录后即可参与回复。登录