Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHPUnit注释中使用类常量_Php_Laravel 4_Phpunit_Eloquent - Fatal编程技术网

在PHPUnit注释中使用类常量

在PHPUnit注释中使用类常量,php,laravel-4,phpunit,eloquent,Php,Laravel 4,Phpunit,Eloquent,PHPUnit的手册显示,我可以在@expectedExceptionCode的注释中使用类常量,请参阅 我试着在我的名字中使用它,这是从雄辩延伸而来的。 当我运行我的测试时,我得到了一个提示:“PHP致命错误:找不到类'Eloquent'” 运行应用程序都很好,所以这取决于单元测试,不是吗 有什么想法吗 namespace Foo\Models; use \Eloquent; class Bar extends Eloquent { const ERRORCODE = 150;

PHPUnit的手册显示,我可以在@expectedExceptionCode的注释中使用类常量,请参阅

我试着在我的名字中使用它,这是从雄辩延伸而来的。 当我运行我的测试时,我得到了一个提示:“PHP致命错误:找不到类'Eloquent'” 运行应用程序都很好,所以这取决于单元测试,不是吗

有什么想法吗

namespace Foo\Models;

use \Eloquent;

class Bar extends Eloquent {
    const ERRORCODE = 150;

    ...
}

请澄清:

PHP Fatal error:  Class 'Eloquent' not found in PathToProject/app/models/Bar.php

更新 在@j-boschieros发表评论后,我使上述代码正常工作!谢谢你,伙计

但是,当我在控制器测试中引发异常时,仍然会发生致命错误

即使我是否使用名称空间

use \Eleoquent;
use Foo\Models\Bar;

class TestController extends TestCase {

    /**
     * @expectedExceptionCode       Foo\Models\Bar::ERRORCODE
     */
    public function testStoreActionWithInvalidDatatyp ()
    {
        $this->call('POST', '/routeToException');
    }

更新2 当我扩展\illumb\Database\Eloquent\Model而不是Eloquent时,使单元测试正常工作

namespace Foo\Models;

use \Illuminate\Database\Eloquent\Model;

class Bar extends Model {
    const ERRORCODE = 150;

    ...
}

这不同于。还可以吗?

该“类”
\elount
实际上是一个别名,在运行时由Laravel框架注册。您正在让PHP在设置这些别名之前解析模型类文件,导致它失败。正确的方法是避免使用全局名称空间别名,而是使用真实的类名(在您的例子中,
illumb\Database\Eloquent\Model
而不是
Eloquent
)。您可以在
app/config/app.php

中找到类别名列表。您是将phpunit作为编写程序包来拉,还是将其作为全局可执行文件?它是全局可执行文件。因此,请检查它是否使用laravel根目录中的
phpunit.xml
。它似乎没有引导应用程序。那么你似乎缺少autoloader。我认为@JarekTkaczyk或@DanFromGermany可能是对的。如果只是需要更新自动加载,那么可以
php composer dumpautoload
。如果是引导问题,那么您需要将
bootstrap=“bootstrap/autoload.php”
(或
autoload.php
文件相对于
phpunit.xml
文件的路径)添加到
phpunit.xml
namespace Foo\Models;

use \Illuminate\Database\Eloquent\Model;

class Bar extends Model {
    const ERRORCODE = 150;

    ...
}