Para los usuarios de windows deben agregar al inicio php, quedando de la siguiente manera:
php vendor/phpunit/phpunit/phpunit
Aún no tienes acceso a esta clase
Crea una cuenta y continúa viendo este curso
Aportes 76
Preguntas 26
Para los usuarios de windows deben agregar al inicio php, quedando de la siguiente manera:
php vendor/phpunit/phpunit/phpunit
código para lo que va dentro de phpunit
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php" colors="true">
<testsuite name="Test Directory">
<directory>tests</directory>
</testsuite>
</phpunit>
Estoy usando Windos 10 y tuve que utilizar el comando así:
php vendor/phpunit/phpunit/phpunit
Además, tuve que crear el directorio tests de forma manual.
Después obtuve el mensaje: No tests executes; tal como en la clase.
Hola, para las personas que les sale un error tiene que instalar primero xml
sudo apt install php-xml
y luego si ejecutan el comando
composer require --dev phpunit/phpunit
Exitos y Nunca Paren De Aprender
DATO IMPORTANTE
1-Para los que se hayan olvidado del curso previo a este (fundamentos de PHP) hay que iniciar el archivo de autoload con composer dump por eso sale un error en la consola a algunos.
2-Para los que estén en windows ejecuten php vendor/phpunit/phpunit/phpunit y funcionará
Adjunto una imagen del error en el punto 1:

{
$email = Validate::email('[email protected]');
$this->assertTrue($email);
}
}
En este paso creamos la carpeta src/ a la que hace referencia el namespace App
mkdir src
luego creamos el archivo con la clase que vamos a usar, siguiendo la teoría de nombres, en este caso no le agregamos test al final: NombreClase.php.
//Crea el archivo
touch src/Validate.php
//Abre el archivo con vsCode
code src/Validate.php
_Escrivimos la clase con sus funciones como se muestra a continuación, retornando un boolean como validación o resultado del test. La función creada debe ser static function _
<?php
namespace App;
class Validate
{
public static function email($value)
{
return (bool) filter_var($value, FILTER_VALIDATE_EMAIL);
}
}
Finalmente ejecutamos la prueba en la consola con el siguiente comando
vendor/phpunit/phpunit/phpunit
<h3>Ejecutando las pruebas ⚙️</h3>
El comando anterior ejecutará la prueba y nos lanzará el mensaje de validación o error correspondeinte. Se sugiere por buenas practicas ejecutar la validación antes de crear la calse, y durante la creación de la calse, así nos aseguramos de reconocer el valor negativo o de error. Nos debe aparecer algo similar a lo que se muestra acá:
Error: Call to undefined method App\Validate::email()
C:\xampp\htdocs\prueba\tests\ValidateTest.php:10
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
Este sería el resultado al ejecutar el comando cuando la función se sncuentré creada correctamente
. 1 / 1 (100%)
Time: 00:00.060, Memory: 6.00 MB
OK (1 test, 1 assertion)
<h3>Construido con 🛠️</h3>
PHP, Composer, PHPUnit
Este proyecto es una recopilación de una de las calses de @platzi, dictado por el profesor Italo Morales
Un pequeño resumen
composer required --dev phpunit/phpunit
{
"name": "damuelas/validate",
"description": "Proyecto de validación",
"autoload": {
"psr-4": {
"App\\": "src"
}
},
"require-dev": {
"phpunit/phpunit": "^9.4"
}
}
composer dump
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php" colors="true">
<testsuite name="Test Directory">
<directory>tests</directory>
</testsuite>
</phpunit>
vendor/phpunit/phpunit/phpunit
Aún no se tienen test para ejecutarlos
<?php
use PHPUnit\Framework\TestCase;
use App\Validate;
class ValidateTest extends TestCase{
public function test_email(){
$email = Validate::email('[email protected]');
$this->assertTrue($email);
}
}
vendor/phpunit/phpunit/phpunit
Debemos recibir un error por que no tenemos la clase Validate creada
<?php
namespace App;
class Validate
{
public static function email($value)
{
return (bool)filter_var($value, FILTER_VALIDATE_EMAIL);
}
}
vendor/phpunit/phpunit/phpunit
En el curso de Introducción a Laravel el maestro hace un gran proyecto con Testing, orientado a una API.
Siempre es muy útil realizar test, ya lo he comentado antes pero no está de más recordar que el programar usando tests te ayuda a evitarte dolores de cabeza buscando el error
Soy el único que se siente así? En el curso anterior, una de las preguntas era si “el asterisco era un operador aritmético” y ahora usan funciones anidadas en clases que dependen un paquete descargado con un framework. Entiendo el código (excepto los :😃, pero no sé para que sirve PHPunit, nunca lo explicaron en la ruta todavía.
Lo primero que hacemos es requerir phpunit para el desarrollo
composer require --dev phpunit/phpunit
Luego de eso, modificamos el archivo composer.json y le agregamos un nombre, despcripcion y configuramos el autoload
{
"name": "matias-ed/validate",
"description": "proyecto de validacion",
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"require-dev": {
"phpunit/phpunit": "^9.5"
}
}
Creamos el archivo phpunit.xml donde especificamos en que carpeta se encuentran nuestros tests
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php" colors="true">
<testsuite name="Test directory">
<directory>tests</directory>
</testsuite>
</phpunit>
Creamos la carpeta tests y dentro de ella creamos el archivo ValidateTest.php
obs: Es buena practica que los archivos de testing terminen en Test
<?php
use PHPUnit\Framework\TestCase;
use App\Validate;
class ValidateTest extends TestCase
//TestCase es una clase de PHPUnit
{
public function test_email()
{
$email = Validate::email("[email protected]");
//aqui llamamos al metodo email de la clase Validate que aun no hemos creado
$this->assertTrue($email);
//Es un metodo de TestCase
}
}
Por ultimo creamos nuestra carpeta src/ y adentro creamos nuestra clase Validate
namespace App;
class Validate
{
public static function email($value)
{
return (bool) filter_var($value, FILTER_VALIDATE_EMAIL);
}
}
//filter_var es una funcion propia de php que me permite filtrar a mis variables
//FILTER_VALIDATE_EMAIL es una constante propia de PHP
Si alguien con mac tiene el error de
No tests executed!
y tiene OSX Big Sur. Esto es debido a un problema con lo que devuelve la version de php que viene pre-instalada en mac ya que se agrego un texto mencionando que php sera eliminado en el futuro pero el mensaje esta concatenado a la version de php
php --version 7.3.22-(to be removed in future macOS)
y phpunit no reconoce la version al tener la cadena de caracteres “-(to be removed in future macOS)” en lugar de solo 7.3.22
La solución es instalar otra version de php usando el manejador de paquetes de mac Homebrew y actualizar el PATH.
$ brew install [email protected]7.4
$ echo 'export PATH="/usr/local/opt/[email protected]/bin:$PATH"' >> ~/.bash_profile
$ echo 'export PATH="/usr/local/opt/[email protected]/sbin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile
Con eso ya me funciono.
Al principio no me funcionaba el comando: vendor/phpunit/phpunit/phpunit.
Por lo tanto decidi primero abrir mi terminal de ubuntu en windows
y ejecutar los siguientes comandos
sudo apt-get update
sudo apt-get install php-xml
Lo anterior para instalar php-xml.
Luego dirigirme al editor Code y comenzar a ejecutar los comandos del profesor.
composer require --dev phpunit/phpunit
luego
composer dump
Luego
php vendor/phpunit/phpunit/phpunit
Finalment, todo fue resuelto.
este curso deberia ir después del curso de PHP orientada a objetos
Me perdí
No me funcionaba hasta que hice:
-renombrar carpeta tests por test
-ejecutar composer dump
-ejecutar php vendor/phpunit/phpunit/phpunit
De qué me perdí, venía tranqui hasta la clase pasada pero todo cambió?
ESTO EN EL ValidateTest
<?php
use PHPUnit\Framework\TestCase;
use App\Validate;
class ValidateTest extends TestCase
{
public function test_email()
{
$email = Validate::email(‘[email protected]’);
$this->assertTrue($email);
}
}
Y esto en Validate
<?php
namespace App;
class Validate
{
public static function email($value)
{
return (bool) filter_var($value, FILTER_VALIDATE_EMAIL);
}
}
Y me sale esto:
There was 1 error:
C:\xampp\htdocs\phpUnit\tests\ValidateTest.php:9
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
😀 Cuando utilizamos composer y PHPUnit estamos entregando un código reusable y escalable.
Este fue el resultado:
es frustrante ver que el profesor supone que a todos les funciona a la primera y no da ninguna idea de como solucionar los posibles problemas que se puedan encontrar con tanta configuración.
Finalmente a pesar de leer todas las ayudas que los demàs dejan no pude hacer correr lo necesario. Asì que dejo el curso hasta aquí, una pena.
Me aparecía este error
vendor/phpunit/phpunit/phpunit
Could not load "/Applications/XAMPP/xamppfiles/htdocs/proyecto/phpunit.xml".
parsing XML declaration: '?>' expected
Con el archivo xml como
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php" colors="true">
<testsuite name="Test directory">
<directory>test</directory>
</testsuite>
</phpunit>
después de intentar y buscar por unos días encontré los argumentos que puede llevar esa linea y se le agrego el de standalone que según entendí indica si este archivo es independiente o no de otros archivos
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<phpunit bootstrap="vendor/autoload.php" colors="true">
<testsuite name="Test directory">
<directory>test</directory>
</testsuite>
</phpunit>
Y así funciono el archivo xml del curso.
PHPUnit 9.5.10 by Sebastian Bergmann and contributors.
No tests executed!
Esto trabajando en mac. Saludos
Fui terco en cambiarme de Windows a Linux, pero ahora que me mude todos los cursos los hago rapiditos! Ya tengo todo preconfigurado!
En mi caso con phpunit 9.5.19 yo tuve que crear mi primero la carpeta tests porque me daba un error de test folder not found
Usuarios windows para ejecutar phpunit en la terminal:
php vendor/phpunit/phpunit/phpunit
Tremenda clase de TDD en apenas 12 minutos!
Me devolví despues de terminar el curso porque en un principio no entendí del todo esta clase y la siguiente, en cambio, ahora tampoco la entendí. Bueno no al 100%.
Considero que estos temas de composer y vendors deberian tener ciertas bases primero de programacion orientado a objetos porque ponen temas de clases y herencias en este curso de PHP Básico igualmente tambien veo estoo, en el otro curso de supuestamente Introducción
Si alguien tenia la curiosidad de como funciona el namespace o que era. Les dejo la documentacion https://www.php.net/manual/en/language.namespaces.rationale.php
Veo este video y recuerdo varias de mis dudas al iniciar con laravel, muy buen curso,
Tengo entendido que es
vendor/phpunit/phpunit/phpunit
Por que es del proveedor “phpunit”, el proyecto “phpunit” y el archivo/carpeta a ejecutar es phpunit.
Alguien sabe si es esto es correcto o estoy malinterpretando algo?
Si usan el editor Visual Studio Code, instalen la extensión XML Language Support by Red Hat
Para que cierre las etiquetas de forma automática.
Quién lo diría que esro me salvó:
Si tienen problema con que Visual Studio Code no detecta el use de PHPUnit simplemente cierra tu Visual Studio Code, espera unos segundos y reinícialo, suele quitarse ese problema.
para los q usan cmd el comando correcto es:
composer require phpunit/phpunit
ACTUALIZACIÓN DE SOPORTE: Puntos que creo que son importantes para la gente que no tiene ni idea de PHP o que viene con la ruta y de pronto se ha topado con pared.
Espero que les sirva y que tengan paciencia, pasara mucho que no entiendan algo y lo mejor es eso, ser paciente y buscar el porque a cada cosa. Éxito!
Si a alguien le sigue saliendo el error de:
1) ValidateTest::test_email
Error: Class 'App\Validate' not found
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
Y ya hizo lo de
composer dump
Y ya revisó que el contenido de los archivos está bien, el problema puede ser que las carpetas no están correctamente organizadas.
Por ejemplo, yo tenía todo bien y todo exactamente igual, pero tenía la carpeta src dentro de tests, cuando tenía que ir fuera.
me sale este warning:
Package sebastian/resource-operations is abandoned, you should avoid using it. No replacement was suggested
como lo podría solucionar, lo probé con php 8 y php 7 y me sigue saliendo el mismo mensaje
buen aporte:
Las clases de prueba deben terminación 'test’
y las clases que deseamos probar no deben tener la palabra test
para los que tengan este problema : " PHPUnit requires the “dom” extension. " ;
se soluciona con este comando desde la terminal de wsl : sudo apt install php-xml
Cómo iniciar composer usando PHPUnit para test de códigos en PHP
https://desarrolloycreo.blogspot.com/2021/11/como-iniciar-composer-usando-phpunit.html
Al realizar el comando en Windows
php vendor/phpunit/phpunit/phpunit
me aparecía un error de que el test directory no se encontraba. Solo era crear la carpeta tests para que ahora si me apareciera el mensaje en amarillo de no tests executed.
Esta clase fue de mucha ayuda
En mi caso cambié de computador entre el curso de Composer y este. Si tienes un caso similar o formateaste la máquina entre otras variables, es importante que instales composer, cierras VC, lo abres nuevamente, ejecutas composer require --dev phpunit/phpunit y debe funcionar sin problema.
configuracion de validate.php
Configuración de ValidateTest.php
configuración de xml
Si después de ejecutar el comando:
composer require --dev phpunit/phpunit
les muestra error (sobre todo usuarios linux) necesitan instalar php-xml de la siguiente manera:
sudo apt install php-xml
y si les sigue mostrando error, adicionalmente puede que necesiten instalar también:
sudo apt install php-mbstring
Espero les ayude. ¡A seguir aprendiendo!
A mi me daba error, pero lo solucioné cambiando el nombre de la carpeta tests
a test
.
En Windows 10 primero tienen que crear la carpeta tests dentro de la raíz, para eso ejecutamos en la terminal
mkdir tests
Y finalmente ejecutamos la sentencia de la clase
php vendor/phpunit/phpunit/phpunit
Estoy usando Windows 10 con WSL Ubuntu 20.04 y la consola no reconocía primero los comandos de composer. Lo solucioné agregando la siguiente línea al archivo .bashrc
nano ~/.bashrc
alias composer='cmd.exe /c composer'
Otro error que tuve fue al correr el comando vendor/phpunit/phpunit/phpunit
, generando el siguiente output:
Command 'php' not found, but can be installed with:
sudo apt install php7.4-cli
Aquí hago un paréntesis, ya que estoy usando xampp con php 8.0.X y no me generó ningún error al correr el comando sugerido, aunque si me quede con la duda de la diferencia de versiones. Aquí corremos el comando mencionado anteriormente.
sudo apt install php7.4-cli
Después al volver a correr vendor/phpunit/phpunit/phpunit
obtenía el siguiente error:
Class 'DOMDocument' not found
Este fue solucionado con el siguiente comando, que encontré aquí mismo en los comentarios:
sudo apt install php-xml
Fue duro, al final lo logre, trabajando con wsl2 se debe instalar adicionalmente las librerías para xml y actualizar la versión de composer, sude con esta clase pero me gusto bastante!
para los que esten usando WSL deben instalar la versión de xml correspondiente a su versión de php tambien, por ejemplo esto:
sudo apt install php-xml
descargará la ultima versión compatible con la ultima de php, pero si tienen versiones anteriores deben hacer por ejemplo:
sudo apt install php7.4-xml
No se porque solo obtengo No tests executed si al profesor le dice que el test si corrio
yo tube que crear antes la carpeta solita de test ya que al correr el comando de. vendor/phpunit/phpunit/phpunit me decia.
sebastian bergmann and contributors tests no fund.
Hola, alguien tiene el repositorio de este proyecto en git, especificamente en este punto donde configura phpunit? estoy atascado. Gracias
Al escribir
$ composer require --dev phpunit/phpunit
Me sale este error y no se instala el phpunit
Warning from https://repo.packagist.org: You are using an outdated version of Composer. Composer 2.0 is about to be released and the older 1.x releases will self-update directly to it once it is released. To avoid surprises update now to the latest 1.x version which will prompt you before self-updating to 2.x.
Using version ^9.4 for phpunit/phpunit
./composer.json has been created
Loading composer repositories with package information
Warning from https://repo.packagist.org: You are using an outdated version of Composer. Composer 2.0 is about to be released and the older 1.x releases will self-update directly to it once it is released. To avoid surprises update now to the latest 1.x version which will prompt you before self-updating to 2.x.
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- phpunit/phpunit 9.4.1 requires ext-dom * -> the requested PHP extension dom is missing from your system.
- phpunit/phpunit 9.4.0 requires ext-dom * -> the requested PHP extension dom is missing from your system.
- Installation request for phpunit/phpunit ^9.4 -> satisfiable by phpunit/phpunit[9.4.0, 9.4.1].
To enable extensions, verify that they are enabled in your .ini files:
- /etc/php/7.4/cli/php.ini
- /etc/php/7.4/cli/conf.d/10-opcache.ini
- /etc/php/7.4/cli/conf.d/10-pdo.ini
- /etc/php/7.4/cli/conf.d/20-calendar.ini
- /etc/php/7.4/cli/conf.d/20-ctype.ini
- /etc/php/7.4/cli/conf.d/20-exif.ini
- /etc/php/7.4/cli/conf.d/20-ffi.ini
- /etc/php/7.4/cli/conf.d/20-fileinfo.ini
- /etc/php/7.4/cli/conf.d/20-ftp.ini
- /etc/php/7.4/cli/conf.d/20-gettext.ini
- /etc/php/7.4/cli/conf.d/20-iconv.ini
- /etc/php/7.4/cli/conf.d/20-json.ini
- /etc/php/7.4/cli/conf.d/20-mbstring.ini
- /etc/php/7.4/cli/conf.d/20-phar.ini
- /etc/php/7.4/cli/conf.d/20-posix.ini
- /etc/php/7.4/cli/conf.d/20-readline.ini
- /etc/php/7.4/cli/conf.d/20-shmop.ini
- /etc/php/7.4/cli/conf.d/20-sockets.ini
- /etc/php/7.4/cli/conf.d/20-sysvmsg.ini
- /etc/php/7.4/cli/conf.d/20-sysvsem.ini
- /etc/php/7.4/cli/conf.d/20-sysvshm.ini
- /etc/php/7.4/cli/conf.d/20-tokenizer.ini
You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
Installation failed, deleting ./composer.json.
A qué curso anterior se refiere Ítalo?
Aspectos relevantes en PHP
Composer y PHPUnit
de Dummy a Tech Leader en 3 2 1. fuck!!!
Excelente
Las pruebas de software son muy importantes a la hora de desarrollar. A tener en cuenta esto
Para los que tiene problemas seguir lo siguiente:
Install:
https://getcomposer.org/download/
Antes de instalar tomar en cuenta que debes tener cerrado Xampp y VSC
Luego correr este:
composer require --dev phpunit/phpunit ^7
Archivos
composer.json
{
"name": "danny/validate",
"description": "Proyecto de Validación",
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"require-dev": {
"phpunit/phpunit": "^7"
}
}
phpunit.xml
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php" colors="true">
<testsuite name="Test Directory">
<directory>tests</directory>
</testsuite>
</phpunit>
ValidateTest.php
<?php
use PHPUnit\Framework\TestCase;
use App\Validate;
class ValidateTest extends TestCase{
public function test_email(){
$email = Validate::email('[email protected]');
$this->assertTrue($email);
}
}
validate.php
<?php
namespace App;
class Validate{
public static function email($value){
return (bool) filter_var($value, FILTER_VALIDATE_EMAIL);
}
}
"name": "italo/validate",
"description": "Proyecto de practica profesional en php",
les recomiendo que cuando configuren el nombre de autoload lo ponga en minisculas.
C:\xampp\htdocs\iniciar_proyecto\tests\ValidateTest.php:9
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
nota
porque sigo teniendo este error aun ya creando la carpeta src y dentro de ella Validate.php ,tengo phpuni 8.5
Si tiene el siguiente error:
ValidateTest::test_email
Error: Class 'App\Validate' not found
Ejecuten en su consola:
composer dump
INICIAR EL PROYECTO CON:
composer require --dev phpunit/phpunit
rellenar el composer.json
crear un archivo, a nivel del vendor, phpunit.xml
llenar el phpunit.xml
en consola escribir vendor/phpunit/phpunit/phpunit
y debe salir “No tests executed”
en caso funca escribir: composer dump
EN WINDOWS:
composer require --dev phpunit/phpunit
rellenar el composer.json
crear un archivo, a nivel del vendor, phpunit.xml
llenar el phpunit.xml
crear la carpeta test a nivel del vendor
en consola escribir: php vendor/phpunit/phpunit/phpunit
y debe salir “No tests executed”
en caso no funca escribir: composer dump
En mi caso, estoy usando Windows, pero me daba error al no tener la carpeta ‘tests’ la cree y ya pude continuar de manera normal.
Me hubiera gustado una explicación mas extensa y minuciosa de esta clase con PHPUnit. Tengo confianza que en las siguientes clases reforzaremos todo esto.
Gracias por el aporte!
continuara!!!
Pregunta!
¿Alguien me puede explicar a qué se refiere en el minuto 4:10 dónde dice que carga lo mismo que cargaba en el archivo index?
Gracias!
Si por A o B no les sale incluso cuando usan: "php vendor/phpunit/phpunit/phpunit"
Solo creen la carpeta test en el mismo nivel que la carpeta Vendor, le dan al comando anterior y listo!!!
Para los que esten versionando en git, lei en el gitignore de laravel que tanto la carpeta vendor como el archivo cache se ignoran
Alguien est’a usando TDD, excelso!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.