PHPUnit 3.7在Laravel 4.1中找不到控制器类

时间:2013-12-14 13:20:01

标签: php laravel phpunit composer-php

设置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的core / config文件中没有改变任何内容。

我尝试过的事情:

我找到了关于此类问题的一些答案(在SO和其他网站上都有),答案建议修正类/文件/方法名称中的错误,例如:

Laravel Controller not working

我不认为这是一个问题,因为我检查了所有的名字。 它还返回“Hello World!”正如在浏览器中测试的上述路线所预期的那样,表明路线在Laravel中正常工作。问题似乎与PHPUnit有关。

我的问题:为什么PHPUnit不能在app / controllers中找到注册类?

1 个答案:

答案 0 :(得分:1)

我认为因为基本的Laravel安装中有一个phpunit.xml文件,所以PHPUnit会知道它。结果证明这是错误的。

问题

PHPUnit没有加载phpunit.xml,这意味着bootstrap/autoload.php中的引导程序文件没有被加载,因此PHPUnit不知道任何类文件在哪里,包括Signup.php


解决方案

当我运行PHPUnit时,我在phpunit.xml开关中添加了--configuration的文件路径:

--configuration /Applications/MAMP/htdocs/laravel/phpunit.xml


一般建议

如果PHPUnit告诉您它找不到类,请检查它是否正在加载phpunit.xml和/或您的引导程序文件。确保您的phpunit.xml文件正确指向您的引导文件,并且您的引导程序文件已正确配置以加载所需的类。

另外,正如我的问题所指出的那样,问题也可能是由于类/文件/方法名称之间的不一致造成的。