You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/content/4/en/part4.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,6 +9,6 @@ lang: en
9
9
In this part, we will continue our work on the backend. Our first major theme will be writing unit and integration tests for the backend. After we have covered testing, we will take a look at implementing user authentication and authorization.
10
10
11
11
<i>Part updated 13th Feb 2024</i>
12
-
- <i>Jest replaced with Node embedded testrunner</i>
12
+
- <i>Jest replaced with Node embedded test runner</i>
Copy file name to clipboardExpand all lines: src/content/4/en/part4a.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,7 +11,7 @@ Let's continue our work on the backend of the notes application we started in [p
11
11
12
12
### Project structure
13
13
14
-
**Note** this course material was written with version v20.11.0 of Node.js. Please make sure that your version of Node is at least as new as the version used in the material (you can check the version by running node -v in the command line).
14
+
**Note**: this course material was written with version v20.11.0 of Node.js. Please make sure that your version of Node is at least as new as the version used in the material (you can check the version by running _node -v_ in the command line).
15
15
16
16
Before we move into the topic of testing, we will modify the structure of our project to adhere to Node.js best practices.
17
17
@@ -407,7 +407,7 @@ The nature of VS Code bleeding into how you write your code is probably not idea
407
407
408
408
### Exercises 4.1.-4.2.
409
409
410
-
**Note** this course material was written with version v20.11.0 of Node.js. Please make sure that your version of Node is at least as new as the version used in the material (you can check the version by running node -v in the command line).
410
+
**Note**: this course material was written with version v20.11.0 of Node.js. Please make sure that your version of Node is at least as new as the version used in the material (you can check the version by running _node -v_ in the command line).
411
411
412
412
In the exercises for this part, we will be building a <i>blog list application</i>, that allows users to save information about interesting blogs they have stumbled across on the internet. For each listed blog we will save the author, title, URL, and amount of upvotes from users of the application.
413
413
@@ -601,7 +601,7 @@ Running this test results in the following error message:
601
601
602
602

603
603
604
-
Let output from the npm test with _average_ function, into a new file <i>tests/average.test.js</i>.
604
+
Let's put the tests for the _average_ function, into a new file called <i>tests/average.test.js</i>.
Let's create a collection of helper functions that are best suited for working with the described sections of the blog list. Create the functions into a file called <i>utils/list_helper.js</i>. Write your tests into an appropriately named test file under the <i>tests</i> directory.
676
+
Let's create a collection of helper functions that are best suited for working with the describe sections of the blog list. Create the functions into a file called <i>utils/list_helper.js</i>. Write your tests into an appropriately named test file under the <i>tests</i> directory.
Copy file name to clipboardExpand all lines: src/content/4/es/part4.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,7 +8,7 @@ lang: es
8
8
9
9
En esta parte, continuaremos nuestro trabajo en el backend. Nuestro primer tema principal será escribir pruebas de unidad e integración para el backend. Una vez que hayamos cubierto las pruebas, analizaremos la implementación de la autenticación y autorización de usuario.
10
10
11
-
<i>Parte actualizada el 22 de enero de 2023</i>
12
-
- <i>No hay cambios importantes</i>
11
+
<i>Parte actualizada el 13 de Febrero de 2024</i>
12
+
- <i>Jest reemplazado con el test runner integrado de Node</i>
Copy file name to clipboardExpand all lines: src/content/4/es/part4a.md
+51-74Lines changed: 51 additions & 74 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,7 +11,9 @@ Continuemos nuestro trabajo en el backend de la aplicación de notas que comenza
11
11
12
12
### Estructura del proyecto
13
13
14
-
Antes de pasar al tema de las pruebas, modificaremos la estructura de nuestro proyecto para cumplir con las mejores prácticas de Node.js.
14
+
**Nota**: el material de este curso fue escrito con la version v20.11.0. Por favor asegúrate de que tu version de Node es al menos tan nueva como la version utilizada en el material (puedes chequear la version al ejecutar _node -v_ en la linea de comandos).
15
+
16
+
Antes de pasar al tema de las pruebas, modificaremos la estructura de nuestro proyecto para cumplir con las mejores prácticas de Node.js.
15
17
16
18
Después de realizar los cambios que explicaremos a continuación, terminaremos con la siguiente estructura:
17
19
@@ -405,6 +407,8 @@ Esta característica de VS Code afectando la forma en que escribes tu código pr
405
407
406
408
### Ejercicios 4.1.-4.2.
407
409
410
+
**Nota**: el material de este curso fue escrito con la version v20.11.0. Por favor asegúrate de que tu version de Node es al menos tan nueva como la version utilizada en el material (puedes chequear la version al ejecutar _node -v_ en la linea de comandos).
411
+
408
412
En los ejercicios de esta parte, crearemos una <i>aplicación de lista de blogs</i>, que permite a los usuarios guardar información sobre blogs interesantes con los que se han encontrado en Internet. Para cada blog listado, guardaremos el autor, el título, la URL y la cantidad de votos positivos de los usuarios de la aplicación.
409
413
410
414
#### 4.1 Lista de Blogs, paso 1
@@ -504,19 +508,12 @@ module.exports = {
504
508
505
509
> La función _average_ usa el método de array [reduce](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce). Si el método aún no te resulta familiar, ahora es un buen momento para ver los primeros tres videos de la serie [Functional Javascript](https://www.youtube.com/watch?v=BMUiFMZr7vk&list=PL0zVEGEvSaeEd9hlmCXrk5yUyqUag-n84) en Youtube.
506
510
507
-
Hay muchas librerías de prueba diferentes o <i>ejecutores de prueba</i> disponibles para JavaScript. En este curso utilizaremos una librería de pruebas desarrollada y utilizada internamente por Facebook llamada [jest](https://jestjs.io/), que se asemeja al rey anterior de las librerías de prueba de JavaScript [Mocha](https://mochajs.org/).
508
-
509
-
Jest es una opción natural para este curso, ya que funciona bien para probar backends y brilla cuando se trata de probar aplicaciones React.
510
-
511
-
> <i>**Usuarios de Windows:**</i> Jest puede no funcionar si la ruta del directorio del proyecto contiene un directorio que tiene espacios en su nombre.
511
+
Hay un gran número de librerías de pruebas, o <i>test runners</i>, disponibles para JavaScript.
512
+
El antiguo rey de las librerías de pruebas es [Mocha](https://mochajs.org/), que fue reemplazado hace unos años por [Jest](https://jestjs.io/). Un recién llegado a las librerías es [Vitest](https://vitest.dev/), que se presenta como una nueva generación de librerías de pruebas.
512
513
513
-
Dado que las pruebas solo se ejecutan durante el desarrollo de nuestra aplicación, instalaremos <i>jest</i> como una dependencia de desarrollo con el comando:
514
+
Hoy en día, Node también tiene una librería de pruebas integrada [node:test](https://nodejs.org/docs/latest/api/test.html), que se adapta bien a las necesidades del curso.
514
515
515
-
```bash
516
-
npm install --save-dev jest
517
-
```
518
-
519
-
Definamos el <i>script npm _test_</i> para ejecutar pruebas con Jest y para informar sobre la ejecución de la prueba con el estilo <i>verbose (detallado)</i>:
516
+
Definamos el <i>script npm _test_</i> para ejecutar pruebas:
520
517
521
518
```bash
522
519
{
@@ -529,62 +526,44 @@ Definamos el <i>script npm _test_</i> para ejecutar pruebas con Jest y para info
529
526
"deploy:full":"npm run build:ui && npm run deploy",
530
527
"logs:prod":"fly logs",
531
528
"lint":"eslint .",
532
-
"test":"jest --verbose"// highlight-line
529
+
"test":"node --test"// highlight-line
533
530
},
534
531
//...
535
532
}
536
533
```
537
534
538
-
Jest requiere que especifiquemos que el entorno de ejecución es Node. Esto se puede hacer agregando lo siguiente al final de <i>package.json</i>:
539
-
540
-
```js
541
-
{
542
-
//...
543
-
"jest": {
544
-
"testEnvironment":"node"
545
-
}
546
-
}
547
-
```
548
-
549
535
Creemos un directorio separado para nuestras pruebas llamado <i>tests</i> y creemos un nuevo archivo llamado <i>reverse.test.js</i> con el siguiente contenido:
La configuración de ESLint que agregamos al proyecto en la parte anterior se queja de los comandos _test_ y _expect_ en nuestro archivo de prueba, ya que la configuración no permite <i>globals</i>. Eliminemos las quejas agregando <i>"jest": true</i> a la propiedad <i>env</i> en el archivo <i>.eslintrc.js</i>.
562
+
En la primera linea, el archivo de prueba importa la función a ser probada y la asigna a una variable llamada _reverse_:
574
563
575
-
```js
576
-
module.exports= {
577
-
'env': {
578
-
'commonjs':true,
579
-
'es2021':true,
580
-
'node':true,
581
-
'jest':true, // highlight-line
582
-
},
583
-
// ...
584
-
}
585
-
```
564
+
La prueba define la palabra clave _test_ y la librería [assert](https://nodejs.org/docs/latest/api/assert.html), que es utilizada por las pruebas para verificar los resultados de las funciones bajo prueba.
586
565
587
-
En la primera linea, el archivo de prueba importa la función a ser probada y la asigna a una variable llamada _reverse_:
566
+
En la siguiente fila, el archivo de prueba importa la función a ser probada y la asigna a una variable llamada _reverse_:
@@ -596,55 +575,59 @@ Los casos de prueba individual se definen con la función _test_. El primer par
596
575
() => {
597
576
constresult=reverse('react')
598
577
599
-
expect(result).toBe('tcaer')
578
+
assert.strictEqual(result, 'tcaer')
600
579
}
601
580
```
602
581
603
-
Primero, ejecutamos el código que se va a probar, es decir, generamos un reverso para la cadena <i>react</i>. Luego, verificamos los resultados con la función [expect](https://jestjs.io/es-ES/docs/expect#expectvalue). Expect envuelve el valor resultante en un objeto que ofrece una colección de funciones <i>matcher</i>, que se pueden usar para verificar la corrección del resultado. Dado que en este caso de prueba estamos comparando dos cadenas, podemos usar el matcher [toBe](https://jestjs.io/es-ES/docs/expect#tobevalue).
582
+
Primero, ejecutamos el código que se va a probar, es decir, generamos un reverso para el string <i>react</i>. Luego, verificamos los resultados con el método [strictEqual](https://nodejs.org/docs/latest/api/assert.html#assertstrictequalactual-expected-message) de la librería [assert](https://nodejs.org/docs/latest/api/assert.html).
604
583
605
584
Como se esperaba, todas las pruebas pasan:
606
585
607
-

586
+

608
587
609
-
Jest espera por defecto que los nombres de los archivos de prueba contengan <i>.test</i>. En este curso, seguiremos la convención de nombrar nuestros archivos de prueba con la extensión <i>.test.js</i>.
588
+
La librería node:test espera por defecto que los nombres de los archivos de prueba contengan <i>.test</i>. En este curso, seguiremos la convención de nombrar nuestros archivos de prueba con la extensión <i>.test.js</i>.
610
589
611
-
Jest tiene excelentes mensajes de error, rompamos la prueba para demostrar esto:
590
+
Vamos a romper el test:
612
591
613
592
```js
614
593
test('reverse of react', () => {
615
594
constresult=reverse('react')
616
595
617
-
expect(result).toBe('tkaer')
596
+
assert.strictEqual(result, 'tkaer')
618
597
})
619
598
```
620
599
621
600
Ejecutar esta prueba da como resultado el siguiente mensaje de error:
622
601
623
-

602
+

624
603
625
-
Agreguemos algunas pruebas para la función _average_, en un nuevo archivo <i>tests/average.test.js</i>.
604
+
Pongamos las pruebas para la función _average_, en un nuevo archivo llamado <i>tests/average.test.js</i>.
La prueba revela que la función no funciona correctamente con una matriz vacía (esto se debe a que en JavaScript dividir por cero da como resultado <i>NaN</i>)
628
+
La prueba revela que la función no funciona correctamente con un array vacío (esto se debe a que en JavaScript dividir por cero da como resultado <i>NaN</i>)
646
629
647
-

630
+

648
631
649
632
Arreglar la función es bastante fácil:
650
633
@@ -660,7 +643,7 @@ const average = array => {
660
643
}
661
644
```
662
645
663
-
Si la longitud de la matriz es 0, devolvemos 0, y en todos los demás casos usamos el método _reduce_ para calcular el promedio.
646
+
Si la longitud del array es 0, devolvemos 0, y en todos los demás casos usamos el método _reduce_ para calcular el promedio.
664
647
665
648
Hay algunas cosas a tener en cuenta sobre las pruebas que acabamos de escribir. Definimos un bloque <i>describe</i> alrededor de las pruebas al que se le dio el nombre _average_:
666
649
@@ -670,17 +653,17 @@ describe('average', () => {
670
653
})
671
654
```
672
655
673
-
Se pueden usar bloques de descripción para agrupar pruebas en colecciones lógicas. La salida de prueba de Jest también usa el nombre del bloque describe:
656
+
Se pueden usar bloques de descripción para agrupar pruebas en colecciones lógicas. La salida de prueba también usa el nombre del bloque describe:
674
657
675
-

658
+

676
659
677
660
Como veremos más adelante, los bloques <i>describe</i> son necesarios cuando queremos ejecutar algunas operaciones de instalación o desmontaje compartidas para un grupo de pruebas.
678
661
679
662
Otra cosa a tener en cuenta es que escribimos las pruebas de una manera bastante compacta, sin asignar la salida de la función que se está probando a una variable:
Creemos una colección de funciones auxiliares que están destinadas a ayudar a lidiar con la lista de blogs. Cree las funciones en un archivo llamado <i>utils/list_helper.js</i>. Escriba sus pruebas en un archivo de prueba con el nombre apropiado en el directorio <i>tests</i>.
676
+
Creemos una colección de funciones auxiliares que estén destinadas a trabajar con las secciones describe de la lista de blogs. Crea las funciones en un archivo llamado <i>utils/list_helper.js</i>. Escribe tus pruebas en un archivo de prueba con el nombre apropiado en el directorio <i>tests</i>.
694
677
695
678
#### 4.3: Funciones Auxiliares y Pruebas Unitarias, paso 1
696
679
697
-
Primero define una función _dummy_ que reciba una matriz de publicaciones de blog como parámetro y siempre devuelva el valor 1. El contenido del archivo <i>list_helper.js</i> en este punto debe ser el siguiente:
680
+
Primero define una función _dummy_ que reciba un array de publicaciones de blog como parámetro y siempre devuelva el valor 1. El contenido del archivo <i>list_helper.js</i> en este punto debe ser el siguiente:
698
681
699
682
```js
700
683
constdummy= (blogs) => {
@@ -709,13 +692,15 @@ module.exports = {
709
692
Verifica que tu configuración de prueba funcione con la siguiente prueba:
Si definir tu propia lista de datos de prueba de blogs es demasiado trabajo, puedes usar la lista ya hecha [aquí](https://raw.githubusercontent.com/fullstack-hy2020/misc/master/blogs_for_test.md).
753
-
754
-
Es probable que tenga problemas al escribir pruebas. Recuerda las cosas que aprendimos sobre [depuración](/es/part3/guardando_datos_en_mongo_db#depuracion-en-aplicaciones-de-node) en la parte 3. Puedes imprimir cosas en la consola con _console.log_ incluso durante la ejecución de la prueba. Incluso es posible usar el depurador mientras se ejecutan las pruebas, puedes encontrar instrucciones para eso [aquí](https://jestjs.io/es-ES/docs/troubleshooting).
755
-
756
-
**NB:** si alguna prueba falla, entonces se recomienda ejecutar solo esa prueba mientras estás solucionando el problema. Puedes ejecutar una única prueba con el método [only](https://jestjs.io/es-ES/docs/api#testonlyname-fn-tiempo).
737
+
Si definir tu propia lista de datos de prueba de blogs es demasiado trabajo, puedes usar la lista ya hecha [aquí](https://github.com/fullstack-hy2020/misc/blob/master/blogs_for_test.md).
757
738
758
-
Otra forma de ejecutar una sola prueba (o bloque de descripción) es especificar el nombre de la prueba que se ejecutará con la bandera [-t](https://jestjs.io/es-ES/docs/cli):
759
-
760
-
```js
761
-
npm test ---t 'when list has only one blog, equals the likes of that'
762
-
```
739
+
Es probable que tengas problemas al escribir pruebas. Recuerda las cosas que aprendimos sobre [depuración](/es/part3/guardando_datos_en_mongo_db#depuracion-en-aplicaciones-de-node) en la parte 3. Puedes imprimir cosas en la consola con _console.log_ incluso durante la ejecución de la prueba.
763
740
764
741
#### 4.5*: Funciones Auxiliares y Pruebas Unitarias, paso 3
765
742
@@ -775,7 +752,7 @@ El valor devuelto por la función podría tener el siguiente formato:
775
752
}
776
753
```
777
754
778
-
**NB** cuando estás comparando objetos, el método [toEqual](https://jestjs.io/es-ES/docs/expect#toequalvalue) es probablemente lo que debas usar, ya que el método [toBe](https://jestjs.io/es-ES/docs/expect#tobevalue) intenta verificar que los dos valores sean el mismo valor, y no solo que contengan las mismas propiedades.
755
+
**NB** cuando estás comparando objetos, el método [deepStrictEqual](https://nodejs.org/api/assert.html#assertdeepstrictequalactual-expected-message) es probablemente lo que debas usar, [strictEqual](https://nodejs.org/api/assert.html#assertstrictequalactual-expected-message) intenta verificar que los dos valores sean el mismo valor, y no solo que contengan las mismas propiedades. Por diferencias entre varios módulos de aserción de funciones, puedes referirte a [esta respuesta Stack Overflow](https://stackoverflow.com/a/73937068/15291501).
779
756
780
757
Escribe las pruebas para este ejercicio dentro de un nuevo bloque <i>describe</i>. Haz lo mismo con los ejercicios restantes también.
0 commit comments