2015-01-20 6 views
1

У меня есть чистая установка Laravel 5.0, и у меня есть проблемы с тестами phpunit. Если я создаю тест для модели пользователя, я получаю ошибку - класс пользователя не найден.Laravel 5.0 phpunit models

Если я тестирую контроллеры, работает нормально, обнаружены классы контроллеров.

Как временное обходное решение, просто чтобы проверить, работает ли он, я добавил класс User внутри UserTest.php.

Я попытался добавить папки в папку приложения, разместив класс внутри, аналогично тому, как это было в Laravel 4.2, и сменил composer.json, и выполнил компоновку dump-autoload, но это не сработало.

"autoload": { 
    "classmap": [ 
     "database", 
     "app/model" 
    ], 
    "psr-4": { 
     "App\\": "app/", 
    } 
}, 

Простых классов выглядит следующим образом:

// tests/models/UserTest.php 

class UserTest extends TestCase 
{ 

    protected $user; 


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

    public function testEmptyNameFailExpected() 
    { 
     $user = new User; 
     $user->name = ''; 
     $result = $user->isValid(); 
     $this->assertFalse($result); 

     return $user; 
    } 
} 

А вот класс User.php в папке приложения (в Laravel 5.0 архитектура отличается)

// app/User.php 
namespace App; 
use Illuminate\Auth\Authenticatable; 
use Illuminate\Database\Eloquent\Model; 
use Illuminate\Auth\Passwords\CanResetPassword; 
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; 
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; 
use Illuminate\Support\Facades\Validator; 
class User extends Model implements AuthenticatableContract, CanResetPasswordContract 
{ 
    use Authenticatable, CanResetPassword; 

    /** 
    * The database table used by the model. 
    * 
    * @var string 
    */ 
    protected $table = 'users'; 

    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = ['name', 'email', 'password']; 
    public static $rules = [ 'name' => 'required|min:3' ]; 

    /** 
    * The attributes excluded from the model's JSON form. 
    * 
    * @var array 
    */ 
    protected $hidden = ['password', 'remember_token']; 


    /** 
    * validate input 
    * 
    * @return bool 
    */ 
    public function isValid() 
    { 
     $validation = Validator::make($this->attributes, static ::$rules); 
     if ($validation->passes()) return true; 
     $this->errors = $validation->messages(); 

     return false; 
    } 

} 
+1

Попробуйте использовать FQN для модели. В вашем случае это может быть «App \ User» – davidxd33

+0

Я пробовал, но все равно не был распознан. Он ищет папку внутри тестов, поэтому я предположил, что что-то с автозагрузкой не так хорошо –

+0

@ davidxd33 сегодня это сработало, не знаю, почему вчера не было –

ответ

3

Я заметил два проблемы с вашим кодом:

Вы сказали, что ваша тестовая папка

app/tests/models/UserTest.php 

Это неверно. В чистой установке Laravel 5.0 - тестовый класс находится в базовой папке - не папка app - поэтому она должна быть

tests/models/UserTest.php 

Также - ваш Пользователь с пространством имен в Laravel 5.0 - поэтому код необходимо будет

$user = new \App\User; 
+0

для первой проблемы - это опечатка, я установил ее в папке с тестами , Прости. Во-вторых, спасибо, сегодня утром я заставляю его работать. Странно, потому что вчера я попробовал то же самое и не работал вообще. –

Смежные вопросы