PHPUnit 3.7 在 Laravel 4.1 中找不到控制器类
Posted
技术标签:
【中文标题】PHPUnit 3.7 在 Laravel 4.1 中找不到控制器类【英文标题】:PHPUnit 3.7 can't find Controller Classes in Laravel 4.1 【发布时间】:2014-01-02 05:51:25 【问题描述】:设置 1:在 phpUnit 中从路由回响工作
routes.php
Route::get('signup', function()
return "Hello World!";
);
/tests/SignupTest.php
class SignupTest extends TestCase
public function testIndex()
$this->call('GET', 'signup');
$this->assertResponseOK();
运行 PHPUnit 会返回以下内容:
OK (1 test, 1 assertion)
设置 2:但是当我路由到它时 PHPUnit 找不到注册控制器
routes.php
Route::get('signup', array('uses' => 'Signup@process'));
/app/controllers/Signup.php
class Signup extends BaseController
public function process()
echo "Hello World!";
/tests/SignupTest.php
class SignupTest extends TestCase
public function testIndex()
$this->call('GET', 'signup');
$this->assertResponseOK();
PHPUnit 返回以下内容:
There was 1 error:
1) SignupTest::testIndex
ReflectionException: Class Signup does not exist
/Applications/MAMP/htdocs/laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php:476
/Applications/MAMP/htdocs/laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php:416
/Applications/MAMP/htdocs/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:423
/Applications/MAMP/htdocs/laravel/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:77
/Applications/MAMP/htdocs/laravel/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:50
/Applications/MAMP/htdocs/laravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php:900
/Applications/MAMP/htdocs/laravel/vendor/laravel/framework/src/Illuminate/Routing/Route.php:118
/Applications/MAMP/htdocs/laravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php:964
/Applications/MAMP/htdocs/laravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php:934
/Applications/MAMP/htdocs/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:677
/Applications/MAMP/htdocs/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:652
/Applications/MAMP/htdocs/laravel/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Client.php:82
/Applications/MAMP/htdocs/laravel/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Client.php:319
/Applications/MAMP/htdocs/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php:74
/Applications/MAMP/htdocs/laravel/app/tests/SignupTest.php:12
FAILURES!
Tests: 1, Assertions: 0, Errors: 1.
设置信息:
Laravel 4.1 PHPUnit 3.7.28 均由 Composer 安装 MAMP 在 Mac OS X 10.8 上运行 PHP 5.4.4我认为我没有更改 Laravel 或 PHPUnit 的核心/配置文件中的任何内容。
我尝试过的事情:
我找到了一些关于此类问题的答案(在 SO 和其他网站上),其中的答案建议修复类/文件/方法名称中的错误,例如:
Laravel Controller not working
我认为这不是问题,因为我已经检查了所有名称。 它还返回“Hello World!”在浏览器中测试时,上述两条路由都符合预期,这表明该路由在 Laravel 中运行良好。问题似乎出在 PHPUnit 上。
我的问题:为什么 PHPUnit 在 app/controllers 中找不到 Signup Class?
【问题讨论】:
【参考方案1】:我假设因为在基本的 Laravel 安装中有一个 phpunit.xml
文件,PHPUnit 会知道它。结果证明这个假设是不正确的。
问题
PHPUnit 未加载 phpunit.xml
,这意味着 bootstrap/autoload.php
中的引导文件未加载,因此 PHPUnit 不知道任何类文件的位置,包括 Signup.php
。
解决方案
我在运行 PHPUnit 时在 --configuration
开关中添加了 phpunit.xml
的文件路径:
--configuration /Applications/MAMP/htdocs/laravel/phpunit.xml
一般建议
如果 PHPUnit 告诉您它找不到类,请检查它是否正在加载 phpunit.xml
和/或您的引导文件。确保您的 phpunit.xml
文件正确指向您的引导文件,并且您的引导文件已正确配置以加载所需的类。
另外,正如我在问题中所指出的,问题也可能是由类/文件/方法名称之间的不一致引起的。
【讨论】:
以上是关于PHPUnit 3.7 在 Laravel 4.1 中找不到控制器类的主要内容,如果未能解决你的问题,请参考以下文章