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

标签 php git composer-php psr-4

更新/我的解决方案:

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

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

我暂时保留这个问题,以防有人从更广泛的角度回答我的问题。 (即回答标题中所述的问题)

问题:

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

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

我找到的解决方案如下,但都不够:

在项目的 composer.json 中包含本地 Git 仓库作为 VCS 仓库

此方法的一个大问题是,对于我所做的每一个小更改,我都需要先提交更改,然后才能对其进行测试。由于我没有测试,我会因为自己愚蠢的语法或 api 错误而导致大量提交——这不是很酷。

将包文件夹移动到项目文件夹并将其添加到 composer.json 中项目的“自动加载”部分

不幸的是这个方法有同样的问题。如果我想执行手动测试,我需要提交我的更改,否则在运行“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 中做一些如此必要的事情,而无需诉诸于此。您如何在不在包本身内部执行实现的情况下测试对 Composer 包的未提交更改?有可能吗?

最佳答案

What I want to do is develop the composer package on a git repository, and do manual testing inside my own project where I'm using the package.

How do you test uncommited changes to a composer package without doing the implementation inside the package itself? Is it even possible?

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

引用:https://getcomposer.org/doc/05-repositories.md#path

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

关于php - 在开发过程中如何正确测试 Composer 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37957604/

相关文章:

git - git-flow merge 是否适合更大的团队?

php - 使用 Composer 安装软件包

php - Composer 更新 => fatal error : Out of memory

php - ' fatal error : Call to undefined method' when I run composer update

php - while 循环 php 的搜索结果

git - 如何对未 checkout 的分支进行非快进 git merge ?

git - 如何添加一个与旧的、已删除的 git 目录同名的 git 子模块?

php - if else if 语句不适用于 get

php - 分解或拆分数据库查询中的值 (PHP/MySQL)

php - "Error Fetching http body"与 php SoapClient