607 votes

Quelle est la différence entre "it" et "test" dans Jest ?

J'ai deux tests dans mon groupe d'essai. L'un des tests utilise it et l'autre utilise test . Les deux semblent fonctionner de manière très similaire. Quelle est la différence entre eux ?

describe('updateAll', () => {
  it('no force', () => {
    return updateAll(TableName, ["fileName"], {compandId: "test"})
        .then(updatedItems => {
          let undefinedCount = 0;
          for (let item of updatedItems) {
            undefinedCount += item === undefined ? 1 : 0;
          }
          // console.log("result", result);
          expect(undefinedCount).toBe(updatedItems.length);
        })
  });

  test('force update', () => {
    return updateAll(TableName, ["fileName"], {compandId: "test"}, true)
        .then(updatedItems => {
          let undefinedCount = 0;
          for (let item of updatedItems) {
            undefinedCount += item === undefined ? 1 : 0;
          }
          // console.log("result", result);
          expect(undefinedCount).toBe(0);
        })
  });
});

Il semble que test est en l'API officielle de Jest mais it ne l'est pas.

0 votes

it pourrait n'être là que pour des raisons de familiarité et de migration depuis d'autres frameworks.

54 votes

Il n'y a aucune différence. La documentation indique clairement test est sous l'alias it .

802voto

musicformellons Points 1525

Le site Documentation sur Jest état it est un alias de test . Ils sont donc exactement les mêmes.

3 votes

Je pense que cette réponse est légèrement trompeuse. it et test ne sont pas exactement les mêmes. Comme expliqué dans la réponse de @gwilde stackoverflow.com/a/56072272/449347 ces alias encouragent le développeur à écrire le nom d'un test sous la forme d'une phrase anglaise lisible - ainsi, l'utilisation aléatoire de l'option it ou test va tout gâcher.

210voto

gwildu Points 525

Ils font la même chose, mais leurs noms sont différents et avec cela leur interaction avec le nom du test.

test

Ce que vous écrivez :

describe('yourModule', () => {
  test('if it does this thing', () => {});
  test('if it does the other thing', () => {});
});

Ce que vous obtenez si quelque chose échoue :

yourModule > if it does this thing

it

Ce que vous écrivez :

describe('yourModule', () => {
  it('should do this thing', () => {});
  it('should do the other thing', () => {});
});

Ce que vous obtenez si quelque chose échoue :

yourModule > should do this thing

Il s'agit donc de lisibilité et non de fonctionnalité.

A mon avis, it a vraiment raison lorsqu'il s'agit de lire le résultat d'un test raté que vous n'avez pas écrit vous-même. Cela permet de comprendre plus rapidement l'objet du test.

Certains développeurs raccourcissent également le Should do this thing à Does this thing qui est un peu plus court et correspond aussi sémantiquement à l'approche it la notation.

10 votes

Certains préfèrent également it('does this thing', () => {}) au lieu de it('should do this thing', () => {} comme son plus court

0 votes

Alternativement, test('thing should do x') peut être préféré à it('Should do X') comme it est souvent vague.

1 votes

@mikemaccana si vous écrivez test('thing should do x') vous n'avez pas une phrase sémantiquement correcte. L'idée derrière ces notations, je pense, est vraiment que vous pouvez lire un test dans une phrase comme vous le feriez à l'oral. De même si vous écrivez test('Does this thing') . Bien sûr, vous pouvez le faire, mais la notation sémantiquement correspondrait en fait à la norme it notation

44voto

Rich Points 1870

Comme les autres réponses l'ont précisé, ils font la même chose.

Je crois que les deux sont proposés pour permettre soit 1) " RSpec des tests de style "comme" :

const myBeverage = {
  delicious: true,
  sour: false,
};

describe('my beverage', () => {
  it('is delicious', () => {
    expect(myBeverage.delicious).toBeTruthy();
  });

  it('is not sour', () => {
    expect(myBeverage.sour).toBeFalsy();
  });
});

ou 2) " xUnit des tests de style "comme" :

function sum(a, b) {
  return a + b;
}

test('sum adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3);
});

Documentation :

11voto

SeyyedKhandon Points 1949

Comme le dit la documentation sur la plaisanterie, ils sont identiques : il alias

test(nom, fn, timeout)

Aussi sous l'alias : it(name, fn, timeout)

Et describe est juste pour quand vous préférez que vos tests soient organisés en groupes : décrire

describe(nom, fn)

describe(name, fn) crée un bloc qui regroupe plusieurs tests connexes. Par exemple, si vous avez un objet myBeverage qui est censé être délicieux mais pas acide, vous pouvez le tester avec :

const myBeverage = {
  delicious: true,
  sour: false,
};

describe('my beverage', () => {
  test('is delicious', () => {
    expect(myBeverage.delicious).toBeTruthy();
  });

  test('is not sour', () => {
    expect(myBeverage.sour).toBeFalsy();
  });
});

Ce n'est pas nécessaire - vous pouvez écrire les blocs de test directement au niveau supérieur. Mais cela peut être pratique si vous préférez que vos tests soient organisés en groupes.

8voto

adrhc Points 505

Vous pouvez remplacer it() par xit() pour exclure temporairement un test de l'exécution ; utiliser it() et xit() est plus éloquent que d'utiliser test() et xit().

voir Tests de focalisation et d'exclusion

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X