我是一个使用多语言项目的Perl开发人员,包括python,node.js和C.值得庆幸的是,所有这些语言都有TAP生成器库。例如,我可以使用mocha
命令来运行Node.js脚本并获取TAP输出。
但是,如何将其与prove
工具集成?对于perl,我通常将测试放在t/
中,而prove -vlc t/
将以perl脚本运行所有.t文件。我唯一能想到的是exec
perl .t文件中的mocha命令。
答案 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项目中使用了一个)。