在PHPUnit注释中使用类常量

时间:2014-09-22 13:47:28

标签: php laravel-4 phpunit eloquent

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

我尝试在我的名字间距模型中使用它,该模型从Eloquent延伸。 当我运行我的测试时,我得到了一个:" PHP致命错误:Class' Eloquent'找不到" 运行应用程序都很好,所以它取决于单元测试,不是吗?

有什么想法吗?

namespace Foo\Models;

use \Eloquent;

class Bar extends Eloquent {
    const ERRORCODE = 150;

    ...
}

class BarTest extends TestCase {

    /**
     * @expectedExceptionCode       Foo\Models\Bar::ERRORCODE
     */
    public function testFoobar()
    {
        $name = 'foobar';
        Bar::findBarOrFail($name);
    }
}

澄清:

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

当我扩展\ Illuminate \ Database \ Eloquent \ Model而不是Eloquent时,我的单元测试工作。

namespace Foo\Models;

use \Illuminate\Database\Eloquent\Model;

class Bar extends Model {
    const ERRORCODE = 150;

    ...
}

这与Laravel Doc不同。还可以吗?

1 个答案:

答案 0 :(得分:0)

" class" \Eloquent实际上是Laravel框架在运行时注册的别名。在设置这些别名之前,您正在使PHP解析模型类文件,从而导致它失败。正确的方法是避免全局命名空间别名,而是使用真实的类名(Illuminate\Database\Eloquent\Model而不是Eloquent)。您可以在app/config/app.php中找到类别名列表。