我正在为作曲家包编写一些测试,但我无法在/src 的子文件夹中加载类。
我的文件夹结构
root
- src
- file1.php
- folder1
- folder2
- file2.php
- tests
测试的文件夹结构反映了 src 的结构。
在我的作曲家.json中,我有:
{
"autoload": {
"psr-4": {
"Namespace1\Package_Namespace\": "src"
}
}
}
现在,当我启动测试时,只有 src 中的测试可以很好地包含自己的类,而使用子文件夹中类的类则不能(例如,file2.php永远不会加载)。
我还尝试在 composer.json 文件中显式指定子文件夹,但它似乎不起作用。
我希望有人能帮助我。如果您需要更多信息,请告诉我,我会提供它们。
谢谢你,祝你圣诞快乐!
我认为您可能需要转义配置中的命名空间:
"autoload": { "psr-4": { "Namespace1\Package_Namespace\": "src" } }
并确保您的类/文件名遵循 PSR-4。另外,请确保 PHPUnit/您正在运行的任何测试套件加载作曲家自动加载文件。
伊塔:
您还可以手动将测试添加到 bootstrap.php 文件中的命名空间(如果您将测试用于命名空间):
$loader = require __DIR__ . "/../vendor/autoload.php";
$loader->addPsr4('Namespace1\Package_Namespace\', __DIR__.'/testdir');
显然,您需要根据自己的路径调整上述内容。
我认为作曲家加载 psr-4 地图的方式有问题。
事实上,我已经更改了反映文件夹结构的命名空间,现在一切正常。
我认为命名空间可以与文件夹结构不同,但这不起作用。
我无法更好地解释我的解决方案,而只能解释反映文件夹结构有效。是偶然的吗?麻将!
无论如何,它现在可以工作...