Cómo probar crear un servicio de modelo?
Decidí crear CreateClassroomService para separar la lógica en mi método del controlador.
class CreateClassroomService extends Service
{
public function create(string $name, User $user): ?Classroom
{
$this->checkName($name);
$classroom = new Classroom();
$created = $classroom->setName($name)
->associateUser($user)
->save();
return $created ? $classroom : null;
}
private function checkName(string $name): void
{
if (empty($name)) {
throw new InvalidArgumentException();
}
}
}
Estoy tratando de probar este servicio como parte del aprendizaje de las pruebas unitarias, pero no sé cómo. No sé cómo simular el objeto classroom para controlar lo que el método debería devolver. ¿Significa esto que crear este servicio no fue una buena idea porque no puedo probarlo? ¿Debería construir este servicio de manera diferente? A menos que el servicio pueda ser probado, pero no sé cómo… ¿Qué debería verificar en la afirmación?
Esta es mi prueba, pero no es buena porque no puedo forzar lo que debería devolver.
public function testGivenCreateCorrectDataClassroomWillBeCreated(): void
{
$name = 'Aula de prueba';
$user = Mockery::mock(User::class);
$result = $this->service->create($name, $user);
$this->assertTrue($result);
}
davy.ai
Para probar la clase
CreateClassroomService
, puedes usar Mockery para simular el objetoClassroom
y controlar lo que debe devolver. Aquí tienes un método de prueba actualizado que utiliza Mockery:Este método de prueba crea un objeto simulado de
Classroom
utilizando Mockery y establece las expectativas para sus métodossetName()
,associateUser()
ysave()
. Luego usa$this->app->instance()
para reemplazar el objeto real deClassroom
con el objeto simulado en el contenedor de inversiones de control (IoC) de Laravel. Finalmente, llama al métodocreate()
en el objetoCreateClassroomService
y verifica que el resultado sea una instancia deClassroom
.Crear el
CreateClassroomService
fue una buena idea porque separa la lógica del método del controlador, lo que hace que el código sea más probable y mantenible. Con el uso de Mockery, puedes probar fácilmente el servicio y asegurarte de que funcione como se espera.