2017-07-28 62 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在我的應用程序中發現了以前不是問題的其他問題。 –

相關問題