Pratiquons le TDD

Voir la vidéo
Description Sommaire

Maintenant que l'on a vu les différents outils pour tester votre code, je vous propose de passer à la pratique en découvrant le principe du TDD (Test driven development).

L'objectif pour ce petit exercice est de créer un système capable de convertir un interval (donné en ms) en un objet contenant les jours, heures, minutes et secondes (voici les fichier de configuration si vous voulez reproduire le même environnement que le mien https://gist.github.com/Grafikart/ffbb700bfc0c10a816652a1773c65a0b).

On commence par voir rouge

La première étape consiste à créer un test qui va forcément échouer (vu que l'implémentation n'est pas encore écrite).

import {intervalToObj} from '../src/interval'

describe('Interval', () => {

    it('should return an object for 0 second', () => {
        const o = intervalToObj(0)
        expect(o).toEqual({
            days: 0,
            hours: 0,
            minutes: 0,
            seconds: 0
        })
    })

})

Une fois ce test écrit on peut passer à l'implémentation.

export function intervalToObj (ms) {
    return {
        days: 0,
        hours: 0,
        minutes: 0,
        seconds: 0
    }
}

Pour le moment on ne cherche pas à définir la logique finale de notre librairie mais on se contente d'écrire le code qui permettra de faire passer nos tests au vert.

Et on recommence

Les tests sont au vert et il est temps de rajouter un scénario qui permettra de repasser au rouge.

it('should return an object for 3 second', () => {
    const o = intervalToObj(3 * 1000)
    expect(o).toEqual({
        days: 0,
        hours: 0,
        minutes: 0,
        seconds: 3
    })
})

Ce test nous force à revoir notre implémentation.

export function intervalToObj (ms) {
    const seconds = ms / 1000
    return {
        days: 0,
        hours: 0,
        minutes: 0,
        seconds
    }
}

Et on continue, en passant au minutes maintenant !

it('should handle minutes', () => {
    const o = intervalToObj(3 * 60 * 1000 + 15 * 1025)
    expect(o).toEqual({
        days: 0,
        hours: 0,
        minutes: 3,
        seconds: 15
    })
})

Je vous laisse essayer de faire la suite...

Publié
Technologies utilisées
Auteur :
Grafikart
Partager