问题是不同的。Andreas 的吸烟者很可能App::Ack
成功地建立了依赖关系(在失败报告中看起来就像不存在一样)。但这里至少有两个问题:
- 当一个发行版被测试时,它的依赖可能已经安装了,也可能没有安装。
PERL5LIB
但是,通过环境变量可以保证所有依赖模块都可用,因此make test
通常可以工作(更具体地说,如果install Module
在 CPAN shell 中使用该命令,则立即安装所有依赖项。如果test Module
使用该命令,则依赖项仅构建,但未安装。CPAN 用户可以稍后使用install_tested
) 进行安装。所以可能是这里App::Ack
没有安装,只是建了. 特别是这意味着ack
脚本没有安装在最终位置。
- 即使安装了它,许多冒烟测试人员或并行安装了多个 perl 的用户使用这个 perl 的非标准目录。所以
ack
不会安装在/usr/bin
or/usr/local/bin
中,而是安装在这个 perl 的 bin 目录中。这个目录可能在也可能不在用户的目录PATH
中。所以你不能假设这can_run("ack")
在这里有效。这里的解决方法是$Config{scriptdir}
临时添加到$ENV{PATH}
. 如果可能的话,另一个解决方案是使用 App 模块而不是脚本。不幸的是,它看起来ack
只能作为脚本调用。
如果您查看示例失败报告,那么您可以看到App::Ack
已安装(它出现在要求和 build_requires 下的 PREREQUISITES 部分中,您还可以App::Ack
在“HAVE”列中查看安装了哪个版本)。您还可以查看用户的PATH
(在 ENVIRONMENT 部分中)。您可能会猜到这个 perl 的 scriptdir,它通常与安装 perl 二进制文件本身的目录相同,并且当前 perl 的路径可见$^X
(在“Perl 特殊变量”下)。
如果你想重现这种行为,那么你需要ack
从你的机器上卸载,使用 构建一个自定义的 perl ./configure.gnu --prefix=/path/to/custom/perl-5.X.Y
,然后使用这个 perl 进行测试。