在PHPUnit注释中使用类常量
PHPUnit的手册显示,我可以在@expectedExceptionCode的注释中使用类常量,请参阅 我试着在我的名字中使用它,这是从雄辩延伸而来的。 当我运行我的测试时,我得到了一个提示:“PHP致命错误:找不到类'Eloquent'” 运行应用程序都很好,所以这取决于单元测试,不是吗 有什么想法吗在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;
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;
...
}