У меня есть чистая установка 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;
}
}
Попробуйте использовать FQN для модели. В вашем случае это может быть «App \ User» – davidxd33
Я пробовал, но все равно не был распознан. Он ищет папку внутри тестов, поэтому я предположил, что что-то с автозагрузкой не так хорошо –
@ davidxd33 сегодня это сработало, не знаю, почему вчера не было –