如何在开发过程中正确测试Composer包?

时间:2016-06-22 02:35:34

标签: php git composer-php psr-4

更新/我的解决方案:

在使用“autoload”键测试之前,我意外地没有从composer.json中删除VCS要求。 现在我的理解(基于刚刚发生的事情)是在运行时处理composer.json的自动加载部分。如果这是正确的,我可能已经解决了我的问题。(错误,但如果命名空间名称中缺少尾随的“\\”,PHP将抛出InvalidArgumentException异常,因此会产生混淆)

PSR-4自动加载器独立于git存储库,并且在测试之前不需要我提交更改,因此这个解决方案足以满足我的目的。

我现在打开这个问题,以防有人从更广泛的角度回答我的问题。 (即回答标题中所述的问题)

问题:

我正在尝试构建主要用于特定项目的东西,但我认为这对其他人有用,我决定将其作为Composer包。

我想要做的是在git存储库上开发composer包,并在我自己的项目中进行手动测试,我正在使用该包。

我发现的解决方案如下,但两者都不够:

在项目的composer.json

中包含本地Git仓库作为VCS存储库

这种方法的一个大问题是,对于我所做的每一个小改动,我都需要在能够测试它们之前提交更改。对于我自己的愚蠢语法或api错误,我会收到大量的提交,因为我没有测试 - 不是很酷。

将包文件夹移动到项目文件夹中,并将其添加到composer.json

中项目的“autoload”部分

不幸的是,这种方法存在同样的问题。如果我想执行手动测试,我需要提交更改,否则在运行“composer update”时会出现以下消息: (请参阅“更新/我的解决方案”标题)

[RuntimeException]
Source directory /srv/http/my-project/vendor/my-package
has unpushed changes on the current branch:
M     composer.json                                                             
A     src/EditorApplication.php

编写一个shell脚本,将源文件(不包括git相关文件)从我的源文件夹复制到项目中的自动加载文件夹

必须有一种方法可以在Composer中做一些必要的事情,而不必诉诸于此。如何在不在包本身内部实现的情况下测试对作曲家包的未经修改的更改?它甚至可能吗?

1 个答案:

答案 0 :(得分:2)

  

我想要做的是在git存储库上开发composer包,并在我自己的项目中进行手动测试,我正在使用该包。

     

如何在不在包本身内部执行的情况下测试对作曲家包的未经修改的更改?它甚至可能吗?

您可以将本地子项目的存储库定义为根项目path中的composer.json存储库。 path允许您依赖本地目录。

参考:https://getcomposer.org/doc/05-repositories.md#path

当子项目的本地开发阶段结束时,您可以发布它并立即标记它以获得第一个版本。您正在通过在Packagist上列出一个版本来跳过dev-master阶段,然后可以将其包含在/任何父项目中。