Avez-vous déjà écrit du code web qui semblait parfait, mais qui s’est révélé plein de bugs lorsque vous l’avez déployé ? Ou peut-être avez-vous travaillé en équipe sur un projet et vous êtes-vous retrouvé à corriger les erreurs des autres développeurs sans avoir une idée claire de ce qui a été cassé ? C’est là que les tests unitaires entrent en jeu ! Dans cet article, nous allons explorer les bases des tests unitaires pour le web, leur côté technique, et leur mise en pratique. Nous allons également découvrir Jest, une librairie populaire pour les tests unitaires en JavaScript et en PHP.

Les bases des tests unitaires

Les tests unitaires sont une pratique essentielle du développement logiciel qui consiste à vérifier chaque unité de code de manière isolée pour s’assurer qu’elle fonctionne correctement. Une unité de code peut être une fonction, une méthode, ou même une classe. L’objectif est de détecter rapidement les erreurs et de s’assurer que chaque composant du code remplit sa fonction de manière fiable.

L’utilité des tests unitaires

Les tests unitaires offrent de nombreux avantages. Tout d’abord, ils permettent de trouver et de corriger les bugs plus rapidement, ce qui réduit les coûts et le temps de développement. De plus, les tests unitaires fournissent une documentation vivante du code, ce qui facilite la maintenance et les modifications ultérieures. Enfin, ils encouragent de bonnes pratiques de développement, telles que la modularité, l’encapsulation et la réutilisabilité.

Tests unitaires en solo et en équipe

Les tests unitaires sont utiles non seulement pour les développeurs travaillant en solo, mais aussi pour les équipes de développement collaboratif. En travaillant en équipe, chaque développeur peut écrire des tests unitaires pour son propre code, ce qui permet de détecter rapidement les problèmes potentiels lors de l’intégration. De plus, les tests unitaires aident à maintenir un niveau de qualité constant, même lorsque plusieurs personnes travaillent sur le même projet.

Introduction à Jest

Jest est une librairie de tests unitaires populaire pour JavaScript et PHP. Elle offre une syntaxe simple et expressive, ce qui facilite l’écriture et la lecture des tests. Jest dispose également de fonctionnalités avancées telles que le « mocking » (simulation) des dépendances, les « spies » (espions) pour surveiller les appels de fonctions, et la génération automatique de rapports détaillés.

Terminologie Jest

1) toBe

La méthode toBe est utilisée pour vérifier si deux valeurs sont strictement égales.

Exemple en JavaScript:

test('vérifie si deux valeurs sont strictement égales', () => { 
  expect(2 + 2).toBe(4);
});

Exemple en PHP:

test('vérifie si deux valeurs sont strictement égales', () => {
  $result = 2 + 2; 
  expect($result)->toBe(4);
});

Exemple en Python :

def test_addition():
  assert add(2, 3) == 5

2) toBeCloseTo

La méthode toBeCloseTo est utilisée pour vérifier si deux valeurs sont proches l’une de l’autre, en tenant compte d’une marge d’erreur.

Exemple en JavaScript:

test('vérifie si deux valeurs sont proches l\'une de l\'autre', () => {
  expect(0.1 + 0.2).toBeCloseTo(0.3, 5); 
});

Exemple en PHP:

test('vérifie si deux valeurs sont proches l\'une de l\'autre', () => {
  $result = 0.1 + 0.2; 
  expect($result)->toBeCloseTo(0.3, 5); 
});

Exemple en Python :

def test_addition():
  result = 0.1 + 0.2
  assert math.isclose(result, 0.3, rel_tol=1e-5)

3) toEqual

La méthode toEqual est utilisée pour vérifier si deux valeurs sont égales, en effectuant une comparaison en profondeur des objets et tableaux.

Exemple en JavaScript:

test('vérifie si deux objets sont égaux', () => { 
  expect({ foo: 'bar' }).toEqual({ foo: 'bar' }); 
});

Exemple en PHP:

test('vérifie si deux objets sont égaux', () => {
  $object1 = ['foo' => 'bar'];
  $object2 = ['foo' => 'bar']; 
  expect($object1)->toEqual($object2);
});

Exemple en Python :

def test_objects():
  assert {'foo': 'bar'} == {'foo': 'bar'}

4) toStrictEqual

La méthode toStrictEqual est similaire à toEqual, mais elle vérifie également le type des valeurs.

Exemple en JavaScript:

test('vérifie si deux valeurs sont strictement égales en termes de type', () => { 
expect('5').not.toStrictEqual(5); 
});

Exemple en PHP:

test('vérifie si deux valeurs sont strictement égales en termes de type', () => {
  $value1 = '5';
  $value2 = 5;
  expect($value1)->not->toStrictEqual($value2);
});

Exemple en Python :

def test_type():
  assert '5' != 5

5) toHaveProperty

La méthode toHaveProperty est utilisée pour vérifier si un objet possède une propriété spécifique.

Exemple en JavaScript:

test('vérifie si un objet possède une propriété spécifique', () => { 
  const user = { name: 'John', age: 30, };
  expect(user).toHaveProperty('name');
});

Exemple en PHP:

test('vérifie si un objet possède une propriété spécifique', () => { 
  $user = [ 'name' => 'John', 'age' => 30, ];
  expect($user)->toHaveProperty('name');
});

Exemple en Python :

def test_user_property(): 
  user = {
    'name': 'John',
    'age': 30,
  } 
  assert 'name' in user

6) toMatchSnapshot

La méthode toMatchSnapshot est utilisée pour vérifier si la sortie d’une fonction ou d’un composant correspond à un instantané (snapshot) pré-enregistré.

Exemple en JavaScript:

test('vérifie si la sortie d\'un composant correspond à un instantané', () => {
  const component = render(<MyComponent />);
  expect(component).toMatchSnapshot(); 
});

Exemple en PHP:

test('vérifie si la sortie d\'un composant correspond à un instantané', () => {
  $component = render(<MyComponent />);
  expect($component)->toMatchSnapshot();
});

Exemple en Python :

def test_component_snapshot():
  component = render(MyComponent()) 
  assert component == snapshot()

7) toThrowError

La méthode toThrowError est utilisée pour vérifier si une fonction lance une erreur spécifique.

Exemple en JavaScript:

test('vérifie si une fonction lance une erreur spécifique', () => { 
  function divide(a, b) { 
    if (b === 0) { 
      throw new Error('Division by zero');
    } 
    return a / b;
  }
  expect(() => divide(10, 0)).toThrowError('Division by zero');
});

Exemple en PHP:

test('vérifie si une fonction lance une erreur spécifique', () => { 
  function divide($a, $b) {
    if ($b === 0) {
      throw new Exception('Division by zero');
    }
    return $a / $b;
  } 
  expect(fn() => divide(10, 0))->toThrowError('Division by zero'); 
});

Exemple en Python :

def test_divide_by_zero():
  def divide(a, b): 
    if b == 0: 
      raise ValueError('Division by zero')
    return a / b 

  with pytest.raises(ValueError): 
    divide(10, 0)

Conclusion

Les tests unitaires avec ou sans Jest sont essentiels pour garantir la qualité du code web. Jest, avec ses nombreuses méthodes d’assertion telles que toBetoBeCloseTotoEqualtoStrictEqualtoHavePropertytoMatchSnapshot, et toThrowError, facilite l’écriture et l’exécution de tests unitaires en JavaScript et en PHP. En utilisant JEST, vous pouvez améliorer la robustesse de votre code et identifier les erreurs plus rapidement. Alors, n’hésitez pas à intégrer Jest dans votre flux de travail de développement et à rendre votre code plus fiable et plus performant grâce aux tests unitaires !

Lien officiel : Jest

0 commentaires

Soumettre un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Autres articles