Was ist der Unterschied zwischen beschreiben und es in Jest?

78

Wenn Sie einen Komponententest schreiben Jestoder Jasminewann verwenden Sie describe?

Wann verwenden Sie it?

Normalerweise mache ich

describe('my beverage', () => {
  test('is delicious', () => {
  });
});

Wann ist es Zeit für ein neues describeoder ein neues it?

Brown Limie
quelle

Antworten:

116

describeunterteilt Ihre Testsuite in Komponenten. Abhängig von Ihrer Teststrategie haben Sie möglicherweise eine Beschreibung für jede Funktion in Ihrer Klasse, jedes Modul Ihres Plugins oder jede benutzerbezogene Funktionalität.

Sie können auch Beschreibungen verschachteln, um die Suite weiter zu unterteilen.

itHier führen Sie einzelne Tests durch. Sie sollten in der Lage sein, jeden Test wie einen kleinen Satz zu beschreiben, z. B. "Er berechnet die Fläche, wenn der Radius eingestellt ist". Sie sollten nicht in der Lage sein, Tests weiter zu unterteilen - wenn Sie Lust dazu haben, verwenden Sie describestattdessen.

describe('Circle class', function() {
  describe('area is calculated when', function() {
    it('sets the radius', function() { ... });
    it('sets the diameter', function() { ... });
    it('sets the circumference', function() { ... });
  });
});
Interrobang
quelle
19

Wie ich in dieser Frage erwähnt habe , describedient es zum Gruppieren, itzum Testen.

Wie in den Scherzdokumenten angegeben testund itidentisch: https://jestjs.io/docs/en/api#testname-fn-timeout

Test (Name, FN, Timeout)

Auch unter dem Alias: it (Name, FN, Timeout)

und describeist nur für den Fall gedacht, dass Sie Ihre Tests in Gruppen organisieren möchten: https://jestjs.io/docs/en/api#describename-fn

beschreiben (Name, fn)

describe(name, fn)Erstellt einen Block, der mehrere verwandte Tests zusammenfasst. Wenn Sie beispielsweise ein myBeverageObjekt haben, das köstlich, aber nicht sauer sein soll, können Sie es testen mit:

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

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

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

Dies ist nicht erforderlich - Sie können die Testblöcke direkt auf der obersten Ebene schreiben. Dies kann jedoch nützlich sein, wenn Sie es vorziehen, Ihre Tests in Gruppen zu organisieren.

SeyyedKhandon
quelle
1

Ich betrachte dies eher aufgrund der Auswirkungen auf die Testausgabe. Mithilfe der Beschreibung oder mehrerer Beschreibungsebenen können Sie Ihre Ausgabe zur besseren Lesbarkeit gruppieren.

MattG
quelle