我有一个遗留项目,它使用“autoload”定义中的“files”部分进行一些初始化。这种初始化取决于某些框架。我正在尝试做的是使这个代码库的少数单元测试可运行,而不需要框架。我的遗留项目的代码通过“autoload”中的“psr-4”和“classmap”的混合加载。此外,该项目依赖于通过Composer加载的许多库。
这意味着我不能像我通常那样在我的测试引导程序中包含composer autoloader(<script src="/Scripts/LAB.min.js"></script>
<script>
$LAB
.script("/bundles/jquery?v=GnU3whLS74nHNYUsUJjcWJKdXvKBNbFqBrkQVKSNlKc1").wait()
.script("/scripts/scripts/fileone.js").wait()
.script("/scripts/scripts/filetwo.js").wait(function() {
FunctionInFileTwo();
});
</script>
)。我在vendor/autoload.php
中只包含了classmap,namespace和psr-4加载器,但是在对Composer代码进行了一些挖掘之后发现它并不那么简单。
使用Composer生成的自动加载器是否有一种有点理智的方式,而不包含“autoload”部分中定义的“文件”?
答案 0 :(得分:0)
一个可行但不太好的解决方案是自己创建Composer自动加载器的实例并自己注册psr-4,classmap和psr-0定义。
假设您的测试引导程序位于项目根目录的子目录中,则以下代码应该有效:
require __DIR__ . '/../vendor/composer/ClassLoader.php';
call_user_func( function() {
$loader = new \Composer\Autoload\ClassLoader();
foreach ( require __DIR__ . '/../vendor/composer/autoload_namespaces.php' as $namespace => $path ) {
$loader->set( $namespace, $path );
}
foreach ( require __DIR__ . '/../vendor/composer/autoload_psr4.php' as $namespace => $path ) {
$loader->setPsr4( $namespace, $path );
}
$classMap = require __DIR__ . '/../vendor/composer/autoload_classmap.php';
if ( $classMap ) {
$loader->addClassMap( $classMap );
}
$loader->register( true );
} );
这将永远不会使用Composer自动加载器中的“静态初始化”代码路径。据我所知,这只是为了优化目的,所以这不应该是测试的问题。