Вы находитесь на странице: 1из 13

29/4/2018 Pruebas con Laravel – Styde.

net

MENU 

Pruebas con Laravel

 Curso: Curso de Laravel desde cero

 Ver todas las lecciones

 Duilio Palacios  26/10/2017

 Laravel, Laravel 5.5, Videotutorial  63 Comentarios

Comparte en  FACEBOOK  TWITTER  GOOGLE+

En la lección anterior donde aprendimos cómo escribir las primeras rutas de


nuestra aplicación, utilizamos el navegador para probar dichas rutas y URLs. El
problema de estas pruebas en el navegador es que no perduran en el tiempo ni
pueden ejecutarse de forma rápida / automática. Así que hoy veremos cómo
podemos probar el código que desarrollemos de forma más inteligente, utilizando
el componente de pruebas automatizadas que viene incluido con Laravel.

https://styde.net/pruebas-con-laravel/ 1/13
29/4/2018 Pruebas con Laravel – Styde.net

Repositorio
 Ver el código de esta lección en GitHub

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos


para que sigas aprendiendo.

Tu correo electrónico

SUSCRÍBETE

Directorio de pruebas

Laravel incluye en el directorio principal de tu proyecto un directorio llamado


/tests . En este directorio vamos a escribir código que se va a encargar de
probar el código del resto de la aplicación. Este directorio está separado en dos
subdirectorios:

El directorio Feature donde escribimos pruebas que emulan peticiones


HTTP al servidor.
El directorio Unit donde escribimos pruebas que se encargan de probar
partes individuales de la aplicación (como clases y métodos).

Escribiendo una prueba

En la siguiente prueba simularemos una petición HTTP GET a la URL del módulo
de usuarios. Con asserStatus comprobamos que la URL carga de forma

https://styde.net/pruebas-con-laravel/ 2/13
29/4/2018 Pruebas con Laravel – Styde.net

correcta verificando que el status HTTP sea 200 . Con el método assertSee
comprobamos que podemos ver el texto “Usuarios”:

1 /** @test */ PHP

2 function it_loads_the_users_list_page()
3 {
4   $this->get('/usuarios')
5     ->assertStatus(200)
6     ->assertSee('Usuarios');
7 }

Para que PHPUnit ejecute el método como una prueba, debes colocar la
anotación /** @test */ antes de la declaración del método o colocar el
prefijo test_ en el nombre del método como tal:

1 function test_it_loads_the_users_list_page
2 {
3   //...
4 }

De lo contrario el método NO será ejecutado como una prueba, lo cual es útil


porque nos permite agregar métodos helpers dentro de nuestra clase de pruebas.

Notas

El comando para generar nuevas pruebas es


php artisan make:test NombreDeLaPruebaTest
Puedes ejecutar las pruebas con vendor/bin/phpunit o crear un alias
para la consola.
Puedes leer sobre los métodos de aserciones disponibles en la
documentación de Laravel.

Ejercicio

Crea una ruta, con su prueba correspondiente para editar usuarios (la URL
debería tener el formato /usuarios/{ID del usuario aquí}/edit ).

Desafío adicional: La ID sólo debería aceptar enteros y deberías escribir una


prueba para comprobar que la URL /usuarios/texto/edit no es válida.

https://styde.net/pruebas-con-laravel/ 3/13
29/4/2018 Pruebas con Laravel – Styde.net

Material Relacionado

Alias de comandos para la consola Windows/Linux/Mac


Curso de programación orientada a objetos con PHP:
Aprende cómo escribir pruebas unitarias con la lección Desarrollo de clases y
métodos con pruebas automatizadas
Aprende cómo encadenar métodos en la lección sobre Constructores
semánticos e interfaces fluidas

Publicado por: Duilio Palacios


Programador y profesor de PHP y Laravel. Creador de Styde.net.

https://www.patreon.com/duiliopalacios

   

 Phpunit Pruebas Automatizadas

 Lección anterior
Rutas con Laravel

Lección siguiente 
Controladores en Laravel

63 Comentarios Styde.net 
1 Acceder

Ordenar por los más nuevos


 Recomendar 3 ⤤ Compartir

Únete a la conversación...

INICIAR SESIÓN CON


O REGISTRARSE CON DISQUS ?

Nombre

Fahico Cárcamo C • hace 10 días


Profesor, ante todo muchas gracias por los tutoriales, pregunto:
tengo instalado en mi pc el paquete WAMP y con este las versiones
5.6.31, 7.0.23 y 7.1.9 de php pero cuando ejecuto el comando
"vendor/bin/phpunit" en la consola GIt Bash se imprime un mensaje
https://styde.net/pruebas-con-laravel/ 4/13
29/4/2018 Pruebas con Laravel – Styde.net
vendor/bin/phpunit en la consola GIt Bash se imprime un mensaje
que me dice que mi versión actual de php es la 5.6.31 y que esta no
soporta phpunit ¿Como puedo ejecutar phpunit con la versión 7.1.9
de php?. Ya busque en Google pero ninguna de las soluciones que
he encontrado funcionan. Gracias de antemano por su respuesta...!
1△ ▽ • Responder • Compartir ›

Freddy Mejia Torres • hace 11 días


Cual es la diferencia entre assertSee y aseerSeeText?
△ ▽ • Responder • Compartir ›

Hamel • hace 12 días


No puedo ejecutar las pruebas test que estoy creando siempre me
muestra que las pruebas se han ejecutado sin problemas aunque
me haya equivocado aproposito, por favor alguien que haya tenido el
mismo error
△ ▽ • Responder • Compartir ›

Dayu BaDel > Hamel • hace 11 días


Quizás te falte ubicar @test en la parte superior del método.
△ ▽ • Responder • Compartir ›

Hamel > Dayu BaDel • hace 7 días


tengo @test ubicado arriba del método, pero ya lo
solucione, solo se me ocurrió eliminar y volver a crear
el archivo php de test y me funciono gracias
△ ▽ • Responder • Compartir ›

Enmanuel Celedonio • hace 24 días


Al ejecutar las pruebas recibo eso de la consola "vendor\bin\phpunit"
no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable. Y ya agrege la ruta a las
variables del sistema y nada un.
△ ▽ • Responder • Compartir ›

Freddy Mejia Torres > Enmanuel Celedonio • hace 11 días


Amigo el problema son los backslash ( \ ) debes cambiarlos
por slash ( / )
△ ▽ • Responder • Compartir ›

edwin peña > Freddy Mejia Torres • hace 2 horas


Gracias amigo!!
△ ▽ • Responder • Compartir ›

notatu • hace un mes


buenas.
https://styde.net/pruebas-con-laravel/ 5/13
29/4/2018 Pruebas con Laravel – Styde.net
bue as
profesor le tengo una dudad sobre el inicio del video al momento de
utilizar el comando vendor/bin/phpuni me aparece el siguiente
inconveniente
"vendor" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.
△ ▽ • Responder • Compartir ›

Juan Rioseco > notatu • hace un mes


estás en windows? siempre estando en la raíz de tu proyecto
intenta escribiéndolo con los "/" al revés, de esta forma:
vendor\bin\phpunit
1△ ▽ • Responder • Compartir ›

Freddy Mejia Torres > Juan Rioseco • hace 11 días


Yo estoy en windows y me funciona con slash /
△ ▽ • Responder • Compartir ›

Giancarlo Hurtado > Juan Rioseco • hace un mes


Gracias Juan!!! me sirvió tu respuesta
1△ ▽ • Responder • Compartir ›

Maria Jose Silva • hace un mes


Excelente explicación, gracias por compartir.
△ ▽ • Responder • Compartir ›

Tabano • hace 2 meses


Para los que no les funcionen los alias con el terminal de Laragon
(Cmder) y usen Windows 10 aqui esta la solución:

http://cosiis.com/blog/arch...
△ ▽ • Responder • Compartir ›

Dayu BaDel > Tabano • hace 12 días


Gracias! :D
△ ▽ • Responder • Compartir ›

Manuel Triano De La C. Ricaldi • hace 2 meses


no encuentra la prueva que cree me cigue diciondo 2/2(100%)
△ ▽ • Responder • Compartir ›

Jorge Augusto • hace 3 meses


Hola gracias por el tutorial Duilo tengo una duda el comentario /**
@test */ para que sirve o que función cumple ya que si no lo pongo al
ejecutar las pruebas fallan y cuando remplazo el anterior por este
antes de cada función las pruebas funcionan correctamente.
https://styde.net/pruebas-con-laravel/ 6/13
29/4/2018 Pruebas con Laravel – Styde.net

△ ▽ • Responder • Compartir ›

Uri Plata > Jorge Augusto • hace 2 meses


Tengo la misma duda
△ ▽ • Responder • Compartir ›

Daniel Vargas > Uri Plata • hace un mes


Amigos, la anotación /** @test **/ es parte de la
sintaxis de PHPUnit, al detectarla asume que el
método declarado se trata de una prueba. Si no
quieren usarla, sus métodos deben empezar con el
prefijo test_ .. ej: function test_valid_user() { ... } .
Duilio lo explica más arriba en éste articulo en la
sección «Escribiendo una prueba»

Suerte y Saludos!!!
1△ ▽ • Responder • Compartir ›

Uri Plata > Daniel Vargas • hace un mes


Perfecto!!
Gracias Daniel
△ ▽ • Responder • Compartir ›

Ruben Lavilla • hace 3 meses


porque no se como iniciar una aplicacion
△ ▽ • Responder • Compartir ›

Ruben Lavilla • hace 3 meses


hola Duilio me podes sacar de una duda, las rutas en laravel es
como el index.php para la programacion estructurada en php?
como enmascaro un proyecto para q al asignarlo una direccion ip
arranque de la ruta index.php o con otro nombre de inicio?
△ ▽ • Responder • Compartir ›

Daniel Vargas > Ruben Lavilla • hace 11 días


hola tienes que crear un virtualhost en tu servidor indicando
en el DocumentRoot la ruta a la carpeta public .. acá se
explican más detalles: https://styde.net/como-crea...

suerte!
△ ▽ • Responder • Compartir ›

Eduard Acevedo • hace 3 meses


Buenas Duilio excelente vídeo, amigo yo tengo una API con jwt pero
obviamente me pide el token por cada peticion no se si habra un
modo de evitarlo
https://styde.net/pruebas-con-laravel/ 7/13
29/4/2018 Pruebas con Laravel – Styde.net

△ ▽ • Responder • Compartir ›

Jaime Gajardo Gangas • hace 3 meses


Estimados, tengo un problema al ejecutar las pruebas con el phpunit,
he probado de todo.
Actualmente php7, laravel 5.5 y phpunit 6.5:

C:\xampp\htdocs\Agenda>C:\xampp\htdocs\Agenda\vendor\bin\phpun
PHPUnit 6.5.5 by Sebastian Bergmann and contributors.

.F.FF... 8 / 8 (100%)

Time: 787 ms, Memory: 14.00MB

There were 3 failures:

1) Tests\Feature\UsersModuleTest::cargaHomeUsuarioPagina
Failed asserting that '\r\n
<html lang="en">\r\n
<head>\r\n
<meta charset="UTF-8">\r\n
<meta name="viewport" \r\n="" content="width=device-width, user-

ver más

△ ▽ • Responder • Compartir ›

Juliens • hace 3 meses


Estoy recibiendo el siguiente error:

```Test code or tested code did not (only) close its own output
buffers```

¿Alguna idea de lo que pueda ser?


2△ ▽ • Responder • Compartir ›

Rubén • hace 4 meses


Ejercicio:
ruta
Route::get('/usuarios/{id}/edit', 'UserController@edit')
->where('id', '[0-9]+'); //-> de este modo solo acepto enteros

en el controller

public function edit($id)


{
return "Editando usuario: {$id}";
}

Y luego en UserModuleTest.php
https://styde.net/pruebas-con-laravel/ 8/13
29/4/2018 Pruebas con Laravel – Styde.net

//prueba de edición de usuarios


/** @test */
function it_loads_the_users_edit_page()
{
$this->get('/usuarios/13/edit')
ver más

1△ ▽ • Responder • Compartir ›

chesstercl > Rubén • hace 3 meses


yo la prueba de .../texto/edit no es valida, la hice asi:

/** @test */
function it_edit_users_without_letters()
{
$this->get('/usuarios/hello/edit')
->assertStatus(404)
->assertSee('Sorry, the page you are looking for could not be
found. ');
}
1△ ▽ • Responder • Compartir ›

Tabano > chesstercl • hace 2 meses


Gracias por la solucion. Solo le hice una pequeña
modificación:

/** @test */
function it_edit_users_without_letters()
{
$this->get('/usuarios/hello/edit')
->assertStatus(404);
}

La linea de assertSee no es necesaria, ya que solo


basta con verificar que nos de un error 404 al ingresar
texto.
1△ ▽ • Responder • Compartir ›

Juan Rioseco > Tabano • hace un mes


Tengo lo mismo, gracias por compartir
△ ▽ • Responder • Compartir ›

Jairo Chanduvi Antonio • hace 4 meses


Buenas noches estoy usando Windows 10 y mi problema es que
cuando uso el comando 'vendor\bin\phpunit' me da como resultado: '
"vendor" no se reconoce como un comando interno o externo,
https://styde.net/pruebas-con-laravel/
hi l t j t bl " ' 9/13
29/4/2018 Pruebas con Laravel – Styde.net
programa o archivo por lotes ejecutable." '.
¿Qué debo hacer?
△ ▽ • Responder • Compartir ›

Carlos Augusto Sandoval Cachay > Jairo Chanduvi


Antonio • hace 3 meses
Hola Jairo... buen día no se si ya solucionaste el
inconveniente... si no lo has hecho, te tengo un par de
soluciones, espero te ayuden.
La primera es que en la consola pongas esto:
DOSKEY t=vendor\bin\phpunit
Lo malo con esta solución es que solo dura mientras tengas
abierta esa consola, quiero decir que si la cierras y abres otra
vez y quieres ejecutar t, ya no funcionará

La segunda es un poco más complicada, pero te dejara


ejecutar los comandos que indiques en cualquier
momento…. Solo son estos pasos:
1. Crea un archivo de extensión .bat, ejemplo:Alias.bat, en
cualquier directorio.
2. Ejecuta el editor del registro, entra en:
HKEY_CURRENT_USER\Software\Microsoft\Command
Processor.
3. Agrega un valor de cadena con el nombre:Autorun y en el
valor: la ruta del archivo .bat… ejem. C:\Bin\Alias.bat

El contenido del archivo .bat son los alias de los comandos


que quieras ejecutar... ejemplo
DOSKEY t=vendor\bin\phpunit
DOSKEY create_test = php artisan make:test $*
DOSKEY alias=if ".$*." == ".." ( DOSKEY /MACROS ) else (
DOSKEY $* )

Con esto ya podrás ejecutar los comandos que quieras


configurándoles un alias
△ ▽ • Responder • Compartir ›

Clemir Rondón Styde > Jairo Chanduvi Antonio


• hace 4 meses
Hola Jairo intenta ejecutando vendor\bin\phpunit es decir usa
la barra invertida \ en vez de /
△ ▽ • Responder • Compartir ›

Jairo Chanduvi Antonio > Clemir Rondón


• hace 4 meses
Hola no había notado como lo escribí en los
comentarios. Pero desde un principio he escrito así:
'vendor\bin\phpunit' y no da resultado alguno ¿Hay
algún artículo al respecto?
https://styde.net/pruebas-con-laravel/ 10/13
29/4/2018 Pruebas con Laravel – Styde.net
algún artículo al respecto?
△ ▽ • Responder • Compartir ›

Clemir Rondón Styde > Jairo Chanduvi


Antonio • hace 4 meses
Otra cosa es verificar que tienes registrado
PHP en la variable de entorno path de
Windows
△ ▽ • Responder • Compartir ›

Fabio Rogeles > Clemir Rondón


• hace 4 meses
no Se si ya solucionaste, a mi me sirvió
"vendor\bin\phpunit", en el momento de
asignar el alias me daba error así que probé
de esta manera "doskey t=vendor\bin\phpunit"
y me sirvió perfectamente.
△ ▽ • Responder • Compartir ›

sansafrank • hace 4 meses


Buenas! No logro que realize siquiera las pruebas basicas por
defecto. Ejecuto el phpunit desde la terminal de Laragon y tambien
desde el cmd de windows. Debe ser algo pequenio que no puedo
identificar.
△ ▽ • Responder • Compartir ›

sansafrank > sansafrank • hace 4 meses


Arreglado!!
△ ▽ • Responder • Compartir ›

Duilio Palacios Styde > sansafrank • hace 4 meses


Hola @sansafrank, si tienes un minuto por favor
cuéntanos tu experiencia (cual era el error + cual fue
la solución), de seguro ayudará a otros. Muchos
saludos.
△ ▽ • Responder • Compartir ›

sansafrank > Duilio Palacios


• hace 4 meses
Si, disculpas. Cuando instale el composer y
luego inicie un proyecto en Laravel empeze a
ejecutar el phpunit desde la consola pero ni
ejecutaba ni las pruebas que vienen por
default. Entonces intente averiguar por mi
cuenta una manera de resolverlo y resulto muy
util insertar este comoando de composer:
composer global require phpunit/phpunit
https://styde.net/pruebas-con-laravel/ 11/13
29/4/2018 Pruebas con Laravel – Styde.net

Estome permitio ejecutar desde mi proyecto


las pruebas y completar el capitulo.
△ ▽ • Responder • Compartir ›

Duilio Palacios Styde > sansafrank


• hace 4 meses
Esta es una solución, otra sería ejecutar el
archivo de phpunit que se encuentra en el
proyecto con vendor/bin/phpunit (luego de
haber ejecutado composer install o composer
update ). Muchos saludos.
1△ ▽ • Responder • Compartir ›

Gloton • hace 4 meses


Me pasa el siguiente problema. La unica forma en la que puedo
generar el alias es escribir el comando vendor/bin/phpunit y despues
alias t=vendor/bin/phpunit. El problema es que dura solo el momento
en que estoy trabajando. Si cierro los programas, no puedo llegar y
ejecutar el comando t, me sale el error

bash: t: command not found

Como lo puedo hacer para que el alias quede permanente?.


△ ▽ • Responder • Compartir ›

Lucas Fiege > Gloton • hace 4 meses


Debes editar el archivo .bashrc que se encuentra en tu
carpeta de usuario y al final del archivo agregar la definición
del alias
△ ▽ • Responder • Compartir ›

Gloton > Lucas Fiege • hace 4 meses


Gracias por responder. Es exactamente donde lo
tengo. Para ejecutarlo me meto por la terminal a el
path al proyecto que lo nombre como laravel55
MacBook-Pro-de-Jorge:~ jorge$ cd
/Applications/MAMP/htdocs/laravel55
Luego ejecuto el comando y sale
MacBook-Pro-de-Jorge:laravel55 jorge$ t
-bash: t: command not found
Si coloco directamente vendor/bin/phpunit
Sale ok.
Estoy un poco desconcertado de que pueda estar
causando el problema.

https://styde.net/pruebas-con-laravel/ 12/13
29/4/2018 Pruebas con Laravel – Styde.net

ver más

△ ▽ • Responder • Compartir ›

Lucas Fiege > Gloton • hace 4 meses


No estoy muy seguro pero puede ser que en

Suscríbete a nuestro
boletín
Te enviaremos publicaciones con
consejos útiles y múltiples recursos
para que sigas aprendiendo.

Tu correo electrónico

SUSCRÍBETE

     

En Styde nos dedicamos a enseñarte tecnologías actuales de desarrollo web para


ayudarte a crear tus proyectos de una forma más eficiente.

Ver Planes • Series y cursos • Ver últimas lecciones


Términos de uso • Privacidad

© 2018 Derechos Reservados - Styde Limited

https://styde.net/pruebas-con-laravel/ 13/13

Вам также может понравиться