如何在其他语言中使用Perl对TAP生产者的“证明”?

时间:2017-10-01 23:13:17

标签: perl unit-testing mocha tap

我是一个使用多语言项目的Perl开发人员,包括python,node.js和C.值得庆幸的是,所有这些语言都有TAP生成器库。例如,我可以使用mocha命令来运行Node.js脚本并获取TAP输出。

但是,如何将其与prove工具集成?对于perl,我通常将测试放在t/中,而prove -vlc t/将以perl脚本运行所有.t文件。我唯一能想到的是exec perl .t文件中的mocha命令。

1 个答案:

答案 0 :(得分:5)

我可以想到在多语言项目中使用TAP作为通用单元测试报告格式的最直接方法是在t/目录中编写一些脚本,这些脚本调用生成TAP的单元测试驱动程序。

Mocha有一个名为mocha-tap-reporter的TAP报告插件,并且从命令行调用它只是

mocha --reporter mocha-tap-reporter <directory>

以下是一个如何在简单项目中进行设置的示例

.
├── node_modules
    (contents of node_modules omitted)
├── package-lock.json
├── package.json
├── t
│   └── mocha.t
└── test
    └── multiply.js

在这种情况下,multiply.js使用assert帮助程序,只有一个测试:

const assert = require('assert');

describe('multiply', function () {
    it('1 * 0 = 0', function () {
        assert.equal(1 * 0, 0);
    });
});

mocha.t只是围绕mocha --reporter mocha-tap-reporter test的shell包装器。

#!/bin/bash
# change directory to folder containing source file
cd "$(dirname "${BASH_SOURCE[0]}")"
# go to project root
cd ..
# invoke mocha test runner with tap reporter
./node_modules/.bin/mocha \
    --reporter mocha-tap-reporter \
    test

然后,如果从项目根运行prove,您将看到:

% prove
t/mocha.t .. ok
All tests successful.
Files=1, Tests=1,  0 wallclock secs ( 0.02 usr  0.01 sys +  0.23 cusr  0.08 csys =  0.34 CPU)
Result: PASS

话虽如此,mocha-tap-reporter插件在三年左右的时间内没有更新,看起来有点不受维护。我认为这是Perl社区之外的TAP库的一般情况(虽然在一段时间内在OCaml项目中使用了一个)。