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');
}
当我扩展\ Illuminate \ Database \ Eloquent \ Model而不是Eloquent时,我的单元测试工作。
namespace Foo\Models;
use \Illuminate\Database\Eloquent\Model;
class Bar extends Model {
const ERRORCODE = 150;
...
}
这与Laravel Doc不同。还可以吗?
答案 0 :(得分:0)
" class" \Eloquent
实际上是Laravel框架在运行时注册的别名。在设置这些别名之前,您正在使PHP解析模型类文件,从而导致它失败。正确的方法是避免全局命名空间别名,而是使用真实的类名(Illuminate\Database\Eloquent\Model
而不是Eloquent
)。您可以在app/config/app.php
中找到类别名列表。