【问题标题】:PHPUnit 3.7 can't find Controller Classes in Laravel 4.1PHPUnit 3.7 在 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?

【问题讨论】:

    标签: php laravel phpunit composer-php


    【解决方案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 文件正确指向您的引导文件,并且您的引导文件已正确配置以加载所需的类。

    另外,正如我在问题中所指出的,问题也可能是由类/文件/方法名称之间的不一致引起的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-04
      • 2016-02-16
      • 2021-10-24
      • 2014-09-25
      • 2020-11-19
      • 1970-01-01
      • 2021-08-17
      相关资源
      最近更新 更多