Refactorizar statics.js: test con spyOn

| Última modificación: 14 de mayo de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

Si quieres aprender a refactorizar funciones, el ejercicio de refactorizar statics.js con el test de la función avf, realizado con spyOn de Jest, puede ser de gran ayuda. Este proceso tiene todo lo que necesitarías en cualquier otra situación con alguna función similar.

¿Cómo refactorizar statics.js?

La función statics.js se puede usar para integrar la realización de comprobaciones con la creación de funciones matemáticas para explorar, por ejemplo, la desviación estándar o el avg o promedio. En esta ocasión, vamos a testar y refactorizar statics.js, con la función avg, para obtener el promedio de una serie de parámetros o de un array que se le ha pasado en un inicio.

Para entender cómo llegamos a este punto de partida, es decir, a la función avg, puedes revisar nuestro artículo sobre cómo testar la función stdDev. Una vez entendido eso, puedes seguir leyendo este post para aprender a refactorizar statics.js.

Test con spyOn de Jest

Antes de empezar a refactorizar statics.js, vamos a aclarar cómo lo vamos a hacer. Queremos realizar las comprobaciones sobre la función avg con la herramienta spyOn de Jest. Esta nos ayuda a agregar mucha más observabilidad en lo que estamos testando, lo que nos permite tener un análisis cualitativo de la función.

Para empezar, vamos a traer la función de avg:

export const avg = function (array) {
            return array.reduce (( prev, curr) => (prev + curr), 0) / array.length

Ya que tenemos la función, podemos empezar a realizar todos los test que deseemos. Para ello, en otro módulo en el que nos centremos en el testing, vamos a importar la función desde el módulo en el que se encuentre. Después, empezaremos a describir la comprobación de la mejor forma que podamos y empezamos a listar todo lo que necesitamos saber.

En primer lugar, puedes realizar un test que compruebe que se llame a la función. Para agregar la herramienta de spyOn, debes instaurarla como una constante y pasarle los parámetros del módulo y de la función, así como el resultado de la función stdDev. Después, puedes emplear expect para proponer lo que estarás esperando como resultado después de espiar.

En segundo lugar, puedes realizar un test que compruebe que la función de avg o promedio se realice solo un par de veces. Hacemos lo mismo que con el test anterior y esperamos, con el método expect, que solo se llame 2 veces.

Por último, podemos ir un poco más lejos y comprobar que la primera vez que se llame a la función avg o de promedio se realice con un argumento, como el de [0, 1, 2]. Esperamos que, si se llama por primera, vez sea: [0, 1, 2]. Si se llama por segunda vez será: [1, 0, 1].

A continuación, puedes visualizar todo lo que te acabamos de contar en forma de código, para que puedas entender mejor la realización del test y, de este modo, aprender a refactorizar statics.js o cualquier otra función similar.

import * as avgModule from './avg.js'

describe ('Testing the stDev Function', () =>  {

it ('Should call avg function', () => {
      const spy = jest.spyOn (avgModule, 'avg')
      const result = stdDev ([0, 1, 2])

      expect (spy).toHaveBeenCalled()
      expect (spy).toHaveBeenCalledWith ([0, 1, 2])
})

it ('Should call avg function only 2', () => {
      const spy = jest.spyOn (avgModule, 'avg')
      const result = stdDev ([0, 1, 2])

      expect (spy).toHaveBeenCalledTimes (2)
})

it ('Should call avg function first time with argument [0, 1, 2]', () => {
      const spy = jest.spyOn (avgModule, 'avg')
      const result = stdDev ([0, 1, 2])

      expect (spy).toHaveBeenNthCalledWith (1, [0, 1, 2])
      expect (spy).toHaveBeenNthCalledWith (2, [1, 0, 1])


})  

Cuando ejecutes todo el módulo de test, vas a darte cuenta de que todos pasarán y, además, podrás seguir construyendo otras comprobaciones.

Has terminado de leer este post acerca de cómo refactorizar statics.js y de cómo realizar un test con spyOn para la función avg o de promedio. De esta manera, tu programa estará mucho más seguro y no tendrás problemas en el futuro.

Si quieres seguir formándote como desarrollador web, te invitamos a unirte a nuestra formación en Desarrollo Web Full Stack Bootcamp, la oportunidad perfecta para convertirte en un profesional en pocos meses y destacar en el mercado laboral IT. ¡Pide información y cambia tu vida!

Alberto Casero

Alberto Casero es CTO en Watium, Fundador de Kas Factory & Coordinador del Bootcamp en Desarrollo Web.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Desarrollo Web

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado