使用jasmine-node测试节点命令行应用程序

时间:2014-06-25 19:35:37

标签: javascript tdd jasmine bdd

我将如何使用Jasmine / jasmine-node测试基于节点的CLI?我在过去使用Jasmine测试了节点模块,这很简单,因为我只需要在spec文件中的模块中,初始化它并测试它,但显然与CLI不同。显然,一种方法是将其转换为类并自行测试,然后将其转换为CLI,但这不是真正的交易。有没有人用Jasmine成功测试过节点CLI?

2 个答案:

答案 0 :(得分:0)

从CLI

运行某个文件夹中的所有测试

在Windows上,从命令提示符开始:

"<PATH TO NODE IF NOT IN ENV>\node.exe" "<PATH TO JASMINE-NODE MODULE>\jasmine-node\lib\jasmine-node\cli.js --verbose --test-dir <PATH TO SPECS>

示例:

"C:\Program Files (x86)\nodejs\node.exe" "c:\MyProject\node_modules\jasmine-node\lib\jasmine-node\cli.js" --verbose --test-dir c:\MyProject\Specs

检查git上的文档:

https://github.com/mhevery/jasmine-node

https://github.com/mhevery/jasmine-node/wiki/Command-Line-Usage

答案 1 :(得分:0)

与任何优秀的unix公民一样,节点CLI应用程序应支持stdout重定向。如果它这样做,那么通过存储缓冲区并在它结束时对它运行断言来测试它变得非常简单。此测试策略使用tape,但产生进程和在其stdout上运行断言的一般概念应该可以转移到另一个测试框架。

var test = require('tape');
var spawn = require('child_process').spawn;
var path = require('path');
var read = require('fs').readFileSync;

test('binary', function (t) {
    t.plan(3);

    process.chdir(__dirname);

    var ps = spawn(process.execPath, [
        path.resolve(__dirname, '../bin/cmd.js'),
        'fixture.txt'
    ]);

    var out = '';
    var err = '';
    ps.stdout.on('data', function (buffer) { out += buffer; });
    ps.stderr.on('data', function (buffer) { err += buffer; });

    ps.on('exit', function (code) {
        var expected = read('expected.txt', 'utf-8');
        t.notOk(err, 'should not error');
        t.equal(code, 0, 'should exit with code 0');
        t.equal(out, expected, 'should perform the transform');
    });
});

此CLI应用程序将文本文件作为其第一个参数,并通过转换运行它。您所要做的就是提供夹具和预期结果,然后运行测试。