【发布时间】:2018-05-20 08:44:33
【问题描述】:
我一直按照此处提供的建议覆盖我的route,创建我自己的helpers.php 并将其加载到引导程序中。它在浏览器中可以正常工作,但在 PHPUnit 中效果不佳:
PHP Fatal error: Cannot redeclare route() (previously declared in /var/www/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:707) in /var/www/app/Http/helpers.php on line 25
似乎 PHPUnit 正在调用供应商自动加载而不是 phpunit.xml 中设置的引导程序,我不知道如何覆盖它。
这是我在 Laravel 的 helpers.php 中抛出异常时得到的调用堆栈
#0 /var/www/vendor/composer/autoload_real.php(66): require()
#1 /var/www/vendor/composer/autoload_real.php(56): composerRequirefaa86f5c74caea0c3ebf4fa6247e01ed('f0906e6318348a7...', '/var/www/vendor...')
#2 /var/www/vendor/autoload.php(7): ComposerAutoloaderInitfaa86f5c74caea0c3ebf4fa6247e01ed::getLoader()
#3 /var/www/vendor/phpunit/phpunit/phpunit(51): require('/var/www/vendor...')
#4 {main}
thrown in /var/www/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php on line 699
只有我无法控制的元素。
编辑
我在composer.json 中进行了一些编辑,以加载我的助手。它现在生成vendor/composer/autoload_files.php:
<?php
// autoload_files.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
// ...
'f0906e6318348a765ffb6eb24e0d0938' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/helpers.php',
'58571171fd5812e6e447dce228f52f4d' => $vendorDir . '/laravel/framework/src/Illuminate/Support/helpers.php',
'224ac75459a4044275cfdffe33336135' => $baseDir . '/app/Http/helpers.php',
);
基本上,如果我有办法在 Laravel 之前注入我的助手,这可以解决我的问题。
我真的很喜欢调试这个东西,并在我的脑海中听到这首小歌“拥有这些整洁的静态助手真是个好主意”,太棒了。
【问题讨论】:
-
@ceejayoz 我已经关注了这里显示的内容。
-
看看 laracasts.com/discuss/channels/testing/… 看看 cmets 是否能帮你找到它。
-
谢谢!没有什么突破性的问题,但有类似的问题!
标签: laravel laravel-5 phpunit composer-php