Can';一旦我发布了PHP包,就不要使用PHPUnit测试它
我使用PHP5.6创建了一个简单的PHP库。 它包括PHPUnit测试用例,我成功地创建了这个包。 然后我发现我也可以在其他项目中使用composer直接从GitHub安装这些包。我可以在开发阶段独立运行测试。但是一旦我发布了包,我就不能运行测试,因为它没有正确地找到自动加载程序文件Can';一旦我发布了PHP包,就不要使用PHPUnit测试它,php,phpunit,composer-php,autoload,Php,Phpunit,Composer Php,Autoload,我使用PHP5.6创建了一个简单的PHP库。 它包括PHPUnit测试用例,我成功地创建了这个包。 然后我发现我也可以在其他项目中使用composer直接从GitHub安装这些包。我可以在开发阶段独立运行测试。但是一旦我发布了包,我就不能运行测试,因为它没有正确地找到自动加载程序文件 <?xml version="1.0" encoding="UTF-8"?> <phpunit bootstrap="vendor/autoload.php" colors="true"
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php"
colors="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader">
<testsuites>
<testsuite>
<directory>tests</directory>
</testsuite>
</testsuites>
测验
我已经在根目录中添加了xml文件。当自动加载文件独立时,其路径是正确的。但一旦安装,目录结构将是不同的
如果我们使用一次require\u
autoloader文件,问题仍然存在,因为安装后目录结构会发生变化
"repositories": [
{
"url": "https://github.com/jerintk/Validator.git",
"type": "git"
}
],
问题:
我认为您最好查看其他存储库,看看它是否有效 对我来说
cd供应商/phpunit/phpunit&&composer安装&phpunit
=>工作正常cd-doctrine/collections/&&composer安装和phpunit
=>工作正常
看来它应该对你有用
如果您查看他们使用的其他供应商的phpunit.xml.dist
:
bootstrap=“./tests/Doctrine/tests/TestInit.php”
(Doctrine)bootstrap=“tests/bootstrap.php”
(phpunit)
看起来你的文件没什么不同。是否确实从供应商文件夹中的packages目录中运行了composer安装
更新:
我将您的存储库添加为默认Symfony安装的依赖项
"repositories": [
{
"url": "https://github.com/jerintk/Validator.git",
"type": "git"
}
],
在require
块中:
“Jthedev/Validators”:“开发主机”
然后我跑了
composer更新
它运行良好。您需要运行composer update并签入新的composer.lock,因为它已过期
从那里我把你的回购目录光盘化了
cd供应商/Jthedev/validator
然后我跑了
composer安装
及
vendor/phpunit/phpunit/phpunit
得到
OK(2个测试,2个断言)
更新二
(因为这太长了,无法发表评论)
@JTheDevcomposer update
为laravel项目添加依赖项,但它不会在vendor/your project
目录中创建vendor文件夹。如果composer为每个项目分别安装了所有依赖项,如:
vendor/
my-project/
vendor/
dependency-A
dependency-C
another-library/
vendor/
dependency-A
dependency-B
这将浪费大量的空间和带宽。相反,composer会获取所有依赖项,并将它们安装在单独的文件夹中,它们相互协作,因为composer会使用该项目的vendor/autoload.php
加载它们。您所说的是在vendor/your project
中创建vendor文件夹。这是不正常的-通常您只需要在开发自己时运行测试,但无论如何,您的问题是当您的项目作为另一个项目的依赖项添加时,如何为您的项目运行测试
为此,您需要在供应商/您的项目
目录中运行composer install,这意味着:
cd供应商/Jthedev/Validators&composer安装和供应商/phpunit/phpunit/phpunit
最终更新(希望如此)
从聊天室:
只有在项目目录中运行composer install时,才会生成自动加载程序。您是正确的,供应商文件夹通常不应该在那里,但如果您想做您正试图做的事情,您需要它。这不是传统。通常,开发人员在项目根文件夹中运行测试,而不是依赖项,但您的问题是“当它是依赖项时,如何运行测试”。答案是您需要在项目文件夹中创建供应商和自动加载文件
只有在项目文件夹内运行composer install时,测试才会运行。但是,如果不这样做就不能运行测试,这不是问题。我认为我的问题需要编辑,否则就不清楚了。当这个包是独立的时,我对它没有任何问题。供应商文件夹位于根文件夹中,phpunit.xml也位于根文件夹中。但当我们将该包安装到框架中时,XML文件将驻留在供应商文件夹的深处。在这种情况下,软件包无法跟踪自动加载器。那是我的问题。如果你克隆我的GitHub回购,它不会导致任何问题。但是当你在另一个软件包中安装它时,你不能测试它。我不知道你的意思。你是说
cd供应商/yournamespace/yourpackage&&composer安装&phpunit
作为依赖项添加时不起作用?或者您希望您的软件包测试只需使用phpunit
即可从根文件夹自动运行吗?不,不,对不起,意思不对。假设您正在为packagist开发一个包。如果有人在他们的项目中安装它。那样的话。请记住,包是独立于框架的。像碳、邮枪等。。。无论框架如何,包都应该工作。它正在工作,但不是测试。希望一切都清楚。您可以尝试安装my GitHub repo并运行测试。@JTheDev,如果有人通过Composer从一个只需要您的库的项目根运行phpunit
,您是否希望您的库的测试运行?没有那么多。我希望至少当他们在供应商文件夹和我的包中运行测试时,测试应该成功。