В настоящее время у меня возникают проблемы при тестировании функции в Laravel. Эта функция является простой функцией сохранения пользователя.Laravel Единичное тестирование Яркая вставка
Текущая структура включает в себя User
class User extends Authenticatable
Тогда у меня есть UserController
class UserController extends Controller
{
protected $user;
public function __construct(User $user)
{
$this->user = $user;
$this->middleware('admins');
}
спасбросков функция определена на классе UserController, этот класс только присваивает переменные запроса и использует Eloquent сохранить функция сохранения в базу данных.
Функция подписи является следующее:
public function storeUser($request)
{
$this->user->name = $request->name;
$this->user->email = $request->email;
$this->user->country_id = $request->country_id;
return $this->user->save();
}
Объект NewAccountRequest простирается от запроса и имеет правила проверки для запроса.
class NewAccountRequest extends Request
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:user',
'password' => 'required|min:6|max:60',
];
}
}
Моя проблема заключается в том, как я могу протестировать эту функцию storeUser.
У меня есть текущий тест:
public function testSaveUserWithEmptyRequest()
{
$user = $this->createMock(User::class);
$controller = new UserController($user);
$request = $this->createMock(NewAccountRequest::class);
$store = $controller->storeUser($request);
$this->assertFalse($store);
}
Я насмешливо как пользователь и NewAccountRequest, проблема в том, что утверждение должно быть ложным, от Eloquent сохранить. Вместо этого я получаю Null. Любая идея о том, как я могу правильно проверить функцию?
Что внутри 'saveUser' функции, вы пропали без вести оператор возврата ? –
@ShadyAtef Обновлен вопрос с помощью кода StoreUser и исправления имени вызова. –
У меня это есть, вы издеваетесь над 'User :: class' .. В PHPUnit' createMock' заменяет все функции объекта с фиктивными, которые ничего не делают и возвращают null. На самом деле, чтобы проверить работу базы данных в laravel, вам нужно использовать одну из двух характеристик, предоставляемых «DatabaseMigrations» или «DatabaseTransactions» –