我如何将 Perl 的 'prove' 与其他语言的 TAP 生产者一起使用?

How can I use Perl's 'prove' with TAP producers in other languages?

我是一名 Perl 开发人员,从事多语言项目,包括 python、node.js 和 C。幸运的是,所有这些语言都有 TAP 生产者库。例如,我可以使用 mocha 命令到 运行 Node.js 脚本并获得 TAP 输出。

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

我能想到的在 multi-language 项目中使用 TAP 作为通用单元测试报告格式的最直接的方法是在 t/ 目录中编写一些脚本来调用 TAP-producing 单元测试驱动程序。

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 只是 shell 包装 mocha --reporter mocha-tap-reporter test.

#!/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 项目中使用过一个)。