24. Pruebas

Versión para imprimir.

A. Introducción

B. Pruebas de rendimiento y soporte de estándares

C. PHPUnit

Versión para imprimir.

1. Hazlo funcionar

2. Salida de las pruebas realizadas

Esta salida muestra algunos fallos para que te des cuenta como se ven. En la práctica, todas la pruebas deben aprobarse.


  PHPUnit 10.5.5 by Sebastian Bergmann and contributors.

  Runtime:       PHP 8.2.7
  
  ..F                                                                 3 / 3 (100%)
  
  Time: 00:00.091, Memory: 8.00 MB
  
  There was 1 failure:
  
  1) RecomiendaTest::testReg2
  Probando reg 2
  Failed asserting that two strings are equal.
  --- Expected
  +++ Actual
  @@ @@
  -'Daddy Yankee.'
  +'Bad Bunny.'
  
  /home/runner/phpunit/tests/RecomiendaTest.php:19

3. Archivos

4. Carpeta « src »

A. src / recomienda.php

1<?php
2
3function recomienda(string $genero): string
4{
5 if ($genero === "pop") {
6 return "Dua Lipa.";
7 } elseif ($genero === "reg") {
8 return "Bad Bunny.";
9 } else {
10 return "De eso no conozco";
11 }
12}
13

5. Carpeta « tests »

A. tests / RecomiendaTest.php

1<?php
2
3use PHPUnit\Framework\TestCase;
4
5require_once __DIR__ . "/../src/recomienda.php";
6
7final class RecomiendaTest extends TestCase
8{
9 public function testPop()
10 {
11 $this->assertEquals("Dua Lipa.", recomienda("pop"), "Probando pop");
12 }
13 public function testReg()
14 {
15 $this->assertEquals("Bad Bunny.", recomienda("reg"), "Probando reg");
16 }
17 public function testReg2()
18 {
19 $this->assertEquals("Daddy Yankee.", recomienda("reg"), "Probando reg 2");
20 }
21}
22

6. composer.json

1{
2 "require-dev": {
3 "phpunit/phpunit": "^10"
4 }
5}

7. composer.lock

1-- No se muestra eñ contenido de este archivo --

8. Carpeta « vendor »

A. vendor / -- No se muestra el contenido de esta carpeta --

1

9. .replit

1run = ["./vendor/bin/phpunit", "tests"]
2
3entrypoint = "tests/RecomiendaTest.php"
4
5[nix]
6channel = "stable-23_05"

10. replit.nix

1{ pkgs }: {
2 deps = [
3 pkgs.php82
4 pkgs.php82Packages.composer
5 ];
6}

D. Jasmine

Versión para imprimir.

1. Hazlo funcionar

  1. Este ejercicio usa la librería Jasmine para JavaScript. Puedes profundizar en este tema en la URL https://jasmine.github.io/

  2. Revisa el proyecto en Replit con la URL https://replit.com/@GilbertoPachec5/jasmine?v=1. Hazle fork al proyecto y córrelo. En el ambiente de desarrollo tienes la opción de descargar el proyecto en un zip.

  3. Usa o crea una cuenta de Google.

  4. Crea una cuenta de Replit usando la cuenta de Google.

  5. Crear un proyecto de tipo Node.js en https://replit.com. Algunos archivos se generan con las instrucciones que siguen, por lo que no se incluyen en el zip, pero si se muestra su contenido en las páginas siguientes.

  6. Si trabajas desde Windows, instala Node.js desde https://nodejs.org/en. Crea una carpeta y pásate a ella desde el símbolo del sistema. o con Visual Studio Code abre la carpeta y muestra una terminal. Inicializa un proyecto de node con la instrucción
    npm init -y

  7. Edita el archivo packege.json e inserta en la linea 6, sin borrar ni sobreescribir nada, la siguiente línea
    "type": "module",

  8. En el mismo archivo packege.json cambia la línea que dice "test" a que diga:
    "test": "jasmine"

  9. Instala Jasmine en el proyecto con la orden:
    npm install --save-dev jasmine

  10. Inicializa Jasmine con la orden:
    npx jasmine init

  11. Añade los archivos que vienen en el proyecto; esto incluye modificar el archivo .replit. El código a probar se coloca en la carpeta src y las pruebas en la carpeta spec.

  12. Haz clic en el botón Run. En la página de desarrollo, en la pestaña Console aparece la salida de las pruebas.

2. Salida de las pruebas realizadas

Esta salida muestra algunos fallos para que te des cuenta como se ven. En la práctica, todas la pruebas deben aprobarse.


> nodejs@1.0.0 test
> jasmine

Randomized with seed 87173
Started
.F.

Failures:
1) recomienda reg2
  Message:
  Expected 'Bad Bunny.' to be 'Daddy Yankee.'.
  Stack:
        at <Jasmine>
        at UserContext.<anonymous> (file:///D:/gilpg/Documents/Sitios/awoas/jasminewin/spec/recomiendaSpec.js:6:45)
        at <Jasmine>

3 specs, 1 failure
Finished in 0.012 seconds
Randomized with seed 87173 (jasmine --random=true --seed=87173)

3. Archivos

4. Carpeta « src »

A. src / recomienda.js

1/**
2 * @param {string} genero
3 */
4export function recomienda(genero) {
5 if (genero === "pop") {
6 return "Dua Lipa."
7 } else if (genero === "reg") {
8 return "Bad Bunny."
9 } else {
10 return "De eso no conozco."
11 }
12}

5. Carpeta « spec »

A. spec / recomiendaSpec.js

1import { recomienda } from '../src/recomienda.js'
2
3describe("recomienda", () => {
4 it("pop", () => expect(recomienda("pop")).toBe("Dua Lipa."))
5 it("reg", () => expect(recomienda("reg")).toBe("Bad Bunny."))
6 it("reg2", () => expect(recomienda("reg")).toBe("Daddy Yankee."))
7})

B. Carpeta « spec / support »

1. spec / support / jasmine.json

1{
2 "spec_dir": "spec",
3 "spec_files": [
4 "**/*[sS]pec.?(m)js"
5 ],
6 "helpers": [
7 "helpers/**/*.?(m)js"
8 ],
9 "env": {
10 "stopSpecOnExpectationFailure": false,
11 "random": true
12 }
13}
14

6. package.json

1{
2 "name": "nodejs",
3 "version": "1.0.0",
4 "description": ,
5 "main": "index.js",
6 "type": "module",
7 "scripts": {
8 "test": "jasmine"
9 },
10 "keywords": [],
11 "author": ,
12 "license": "ISC",
13 "dependencies": {
14 "@types/node": "^18.0.6",
15 "node-fetch": "^3.2.6"
16 },
17 "devDependencies": {
18 "jasmine": "^5.1.0"
19 }
20}
21

7. package-lock.json

1-- No se muestra el contenido de este archivo. --

8. Carpeta « node_modules »

A. node_modules / -- No se muestra el contenido de esta carpeta --

1

9. .replit

1run = ["npx", "jasmine"]
2entrypoint = "src/recomienda.js"
3modules = ["nodejs-20:v8-20230920-bd784b9"]
4hidden = [".config", "package-lock.json"]
5
6[nix]
7channel = "stable-23_05"
8
9[unitTest]
10language = "nodejs"
11
12[deployment]
13run = ["node", "index.js"]
14deploymentTarget = "cloudrun"
15ignorePorts = false
16

10. replit.nix

1{pkgs}: {
2 deps = [ ];
3}
4

11. jsconfig.json

  • Este archivo ayuda a detectar errores en los archivos del proyecto.

  • Lo utiliza principalmente Visual Studio Code.

  • No se explica aquí su estructura, pero puede encontrarse la explicación de todo en la documentación del sitio de Visual Studio Code.

1{
2 "compilerOptions": {
3 "checkJs": true,
4 "strictNullChecks": true,
5 "target": "ES6",
6 "module": "ES6",
7 "moduleResolution": "classic",
8 "lib": [
9 "ES2017",
10 "WebWorker",
11 "DOM"
12 ]
13 }
14}

E. Prueba de los servicios

F. Pruebas de la app

G. Resumen