Mocker les objets du langage JavaScript

La librairie Vitest contient des "helpers" qui facilitent l'écriture des tests. Ils sont accessibles avec l'instruction vi.

L'une des fonctions de cette libraire est vi.spyOn. Elle permet de mocker et d'écouter les méthodes des objets du langage JavaScript (exemples : Math.random, Console.log, Date.now, etc.).

vi.SpyOn pour écouter

L'écoute permet, entre autre, de vérifier l'interaction avec les objets du langage JavaScript.

Par exemple, soit l'échantillon de code ci-dessous provenant d'un composant. L'un des comportements du composant est d'afficher dans la console le titre d'un film cliqué dans une liste.

...
console.log(
    "Événement 'click' sur film. ",
    movie.title
)
...

Pour vérifier le comportement, on peut tester l'interaction que le composant a avec l'objet console, c’est-à-dire de savoir si console.log est appelé avec les bonnes informations. On pourrait écrire un test qui ressemble à :

// Arrange
// ... ici code de mise en place du test, avec par exemple, la déclaration de
// expectedMovie utilisé ci-dessous et la configuration de mock utilisé
// par le composant ...
const spyConsole = vi.spyOn(console, 'log')

// Action
// ... ici code qui utilise le composant afin de vérifier un comportement ...
// Assert
expect(spyConsole).toHaveBeenCalledWith(
    expect.anything(),
    expectedMovie.title,
)

vi.SpyOn pour mocker

La méthode mockReturnValue utilisé avec vi.spyOn permet de modifier le comportement d'un objet JavaScript qui est utilisé dans le code à tester. Par exemple, pour configurer Math.random afin de retourner toujours la même valeur :

const randomizedNumber = 4
vi.spyOn(Math, 'random').mockReturnValue(randomizedNumber)

const dice = new DiceComponent()
var response = dice.generateNumber()

expect(response).equal(randomizedNumber)