Personalmente no me he lo han pedido en ninguna entrevista pero lo veo un ejercicio interesante para ver la forma que tiene de trabajar los candidatos y conocer como se enfrentan a los retos que se le vayan planteando.

Para este ejercicio nos piden escribir un programa que imprima números del 1 al 100, cuando sean múltiplos de 3 mostraremos «Fizz» en lugar del número que corresponda y para los múltiplos de 5 «Buzz». En caso que el número sea múltiplo de ambos sacaremos «FizzBuzz».

Se considera una buena practica plantear nuestra prueba con Test Driven Development (Desarrollo conducido por test). Como actualmente estoy trabajando en React voy a realizar esta prueba con node.js y jest. Creamos 2 archivos por una lado index.js con nuestra función principal y por otro index.test.js para que Jest lance los test unitarios que definiremos (próximamente publicare un articulo sobre test con Jest y cómo configurarlo).

fizz buzz en test driven development

index.js Fizz Buzz

Por ahora solo definimos la función para que nos devuelva el número entero del valor que le mandemos y el bucle de los 100 números. Usaremos la función module.exports para poder importarlo en nuestro archivo de test.

function isFizzBuzz(n) {
    const nInt = parseInt(n)
    return n
}
for(let i = 1;i < 101;i++) {
    console.log(isFizzBuzz(i))
}

module.exports = isFizzBuzz

index.test.js Fizz Buzz

Aqui definiremos los test para cada caso que se nos pide, que devuelva un número, que devuelva ‘fizz’ cuando sea multiplo de 3…

const isFizzBuzz = require("./index")

describe("fizzbuzz", () => {
    test("return number is nos multiple of 3 o 5", () => {
        const expected = 'number'
        const result = typeof(isFizzBuzz(1))
        expect(result).toBe(expected)
    })
    test("is multiple of 3 then fizz", () => {
        const expected = "fizz"
        const result = isFizzBuzz(3)
        expect(result).toBe(expected)
    })
    test("is multiple of 5 then buzz", () => {
        const expected = "buzz"
        const result = isFizzBuzz(5)
        expect(result).toBe(expected)
    })
    test("is multiple of 3 and 5 then fizzbuzz", () => {
        const expected = "fizzbuzz"
        const result = isFizzBuzz(15)
        expect(result).toBe(expected)
    })
})

Por ahora todos nuestro test deben fallar excepto el primero. Nuestra función isFizzBuzz no se va a complicar mucho más, como ya tenemos un entero, solo debemos crear 3 condiciones.

function isFizzBuzz(n) {
    const nInt = parseInt(n)
    if(nInt % 3 === 0 && nInt % 5 === 0)
        return 'fizzbuzz'
    if(nInt % 3 === 0)
        return 'fizz'
    if(nInt % 5 === 0)
        return 'buzz'
    return n
}
for(let i = 1;i < 101;i++) {
    console.log(isFizzBuzz(i))
}

module.exports = isFizzBuzz

Como tenemos la clausura de nuestra función dentro del condicional no necesitamos poner ‘else’ o ‘else if’, directamente terminara cuando se cumpla la condición.

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Instagram