2017-07-28 93 views
2

在PHPUnit 5.x中,我没有任何问题。一旦我升级到6.2,我开始收到以下错误: Fatal error: Class 'Eloquent' not found in /my/app/Database/Model.php on line 14 我已经执行了composer dump-autoload。因为它以前工作,我认为这是因为新版本的变化如何设置TestCase.php,但我找不到任何可靠的。PHPUnit 6.2致命错误:未在/.../Database/Model.php中找到类'Eloquent'

在测试本身,我打电话这样

测试设置方法父设置方法:

public function setUp() 
    { 
     parent::setUp(); 
    } 

TestCase.php:

class TestCase extends Illuminate\Foundation\Testing\TestCase { 
    protected $baseUrl = 'http://whatever.thing'; 
    public $user; 
    public $password; 
    public $mockUser; 
    public function createApplication() { 
     //Server address used by the test suite's instance of $_SERVER. 
     $_SERVER['REMOTE_ADDR'] = isset($_SERVER['REMOTE_ADDR'])? $_SERVER['REMOTE_ADDR']:'127.0.0.1'; 

     $app = require __DIR__.'/../bootstrap/app.php'; 

     $app->make('Illuminate\Contracts\Console\Kernel')->bootstrap(); 

     return $app; 
    } 

} 

回答

1

我想通了什么问题在升级期间。首先,我有一种被延长Eloquent这样一个模型类:我把它改成这个

use Eloquent; 

和它的工作:

use Illuminate\Database\Eloquent\Model as Eloquent; 

于是,我产生一个新的Laravel 5.4项目,并探讨了如何他们正在实施新版本的PHPUnit。我遵循新的结构,并将我的TestCase.php改为新的发展方向。任何人都希望:

TestCase.php:

namespace Tests; 

use Illuminate\Foundation\Testing\TestCase as BaseTestCase; 

abstract class TestCase extends BaseTestCase 
{ 
    use CreatesApplication; 
} 

CreatesApplication.php:

namespace Tests; 

use Illuminate\Contracts\Console\Kernel; 

trait CreatesApplication 
{ 
    /** 
    * Creates the application. 
    * 
    * @return \Illuminate\Foundation\Application 
    */ 
    public function createApplication() 
    { 
     $app = require __DIR__.'/../bootstrap/app.php'; 

     $app->make(Kernel::class)->bootstrap(); 

     return $app; 
    } 
} 
+0

听起来也许是公平的,所以只是问:不Laravel提供一个基础测试用例是什么?我不知道Laravel有什么共同之处,但是您可以重新使用base-testcase或框架Trait(?)来实现这一点? – hakre

+0

这个答案实际上是复制了Laravel在实例化一个新项目时设置了基本测试类的方式。但是,如果您使用的是旧版本的Laravel并升级到较新的版本,则有可能需要返回并模仿它们的操作方式。我认为我真正的问题是Laravel的新版本加上新的PHPUnit在我的应用程序中发现了以前不是问题的其他问题。 –

相关问题