我使用PHP 5.6创建了一个简单的PHP库。 它包括PHPUnit测试用例,我成功创建了包。 然后我发现我可以在其他项目中使用composer直接从GitHub安装这些软件包。我可以在开发阶段独立运行测试。但是一旦我发布了包,我就无法运行测试,因为它没有正确找到自动加载器文件。
<?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_once
自动加载器文件,问题仍然存在,因为安装后目录结构会发生变化。
问题:
答案 0 :(得分:2)
我会说你最好查看其他存储库,看看它是否有效。
对我来说
cd vendor/phpunit/phpunit && composer install && phpunit
=&gt;工作
cd doctrine/collections/ && composer install && phpunit
=&gt;工作
所以它似乎应该适合你。
如果您查看他们使用的其他供应商的phpunit.xml.dist
:
bootstrap="./tests/Doctrine/Tests/TestInit.php"
(学说)
bootstrap="tests/bootstrap.php"
(phpunit)
看起来你的文件并没有那么不同。您确定从供应商文件夹内的packages目录中运行了composer install
吗?
我将您的存储库添加为默认Symfony安装的依赖项。
"repositories": [
{
"url": "https://github.com/jerintk/Validator.git",
"type": "git"
}
],
在require
区块中:
"Jthedev/Validators": "dev-master"
composer update
运行正常。你需要运行composer update并检查新的composer.lock,因为它已经过时了。
从那里我进入你的回购目录。
cd vendor/Jthedev/Validators
composer install
和
vendor/phpunit/phpunit/phpunit
得到了
OK (2 tests, 2 assertions)
(因为评论太长了)
@JTheDev composer 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/your-project
目录中运行中的composer install ,这意味着:
cd vendor/Jthedev/Validators && composer install && vendor/phpunit/phpunit/phpunit
来自聊天:
只有在项目目录中运行composer install时才会生成自动装带器。你是对的,供应商文件夹通常不应该存在,但如果你想做你想做的事情,你需要它。这不常见。通常开发人员在他们的项目根文件夹中运行他们的测试,而不是依赖项,但是你的问题是&#34;当它是一个依赖项时,我怎么能运行我的测试&#34;。答案是您需要在项目文件夹中创建供应商和自动加载文件
只有在项目文件夹中运行composer install时才会运行测试。但如果测试没有这样做就不会有问题。