我有一组PHP项目,其中一些依赖于其他项目。都有PHPUnit测试。所有都可以通过Composer安装,并使用composer.json文件指定它们的依赖项。每个项目的根目录都有一个phpunit.xml.dist文件,该文件指向一个bootsrap文件。
现在我有这个项目Foo有许多直接依赖和几个间接依赖。对于Foo的CI,我想运行它的所有测试,以及它的所有依赖项。
这可能通过Composer以某种方式完成吗?如果没有,是否有一些标准的清洁方式呢?
答案 0 :(得分:4)
我想你可以编写一个包含所有内容的TestSuite,或者编写一个脚本,递归地钻入所有目录以查找测试。
但是,通常情况下,您不会运行库和依赖项的测试,除非您第一次安装它们。你没有(读:不应该)真正改变你的应用程序中的库或依赖代码(这有例外),所以一旦你安装了依赖并运行它的测试,假设它们通过,它们应该总是通过,因为你没有改变什么。
如果要更改依赖项代码,则应该单独执行此操作,尤其是在拥有依赖项的情况下。我假设您会出于以下两个原因之一来执行此操作:修复错误或添加功能。打开依赖项的项目/文件,为更改编写一个或多个测试,进行更改,确保测试通过,将更改提交到依赖项。然后让您的应用程序下拉更新的依赖项。
它的tl; dr是你不应该担心运行库或依赖测试,因为那些应该是你在应用程序中没有触及的黑盒子。
答案 1 :(得分:2)
Composer无法帮助您进行任何测试。
我怀疑它可以自动完成。您事先不知道任何所需库的测试位于何处。甚至可能是测试未包含在已发布的库版本中,因为它们不是直接用途。
如果你知道你的所有图书馆确实都有他们的测试位于某个地方,那么你必须自己编写代码以便在一个大的元测试中收集所有这些测试。但我想知道这些是否真的有用。
我正在使用CI和Jenkins以及一些内部库,当我在所需的库中更改某些内容时,我设置了Jenkins来启动依赖库的测试。 dependency graph view plugin正在帮助管理它。
答案 2 :(得分:1)
您可以尝试composer scripts
{
"scripts": {
"test": "phpunit"
}
}
或者创建一个makefile,然后使用composer
调用它{
"scripts": {
"build-all": "make build-all"
}
}