javascript - Hva er forskjellen mellom 'it' og 'test' i Jest?


Jeg har to tester i testgruppen min. Den ene testen bruker it og den andre bruker test. Begge ser ut til å fungere veldig likt. Hva er forskjellen mellom dem?

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);
        })
  });
});

Oppdatering - nov 2022:

Det ser ut til at test og it er utskiftbare i henhold til den offisielle API-en til Jest. Som @gwildu beskrev her, bør du velge én over den andre for lesbarhetens skyld.

Svar #1

Jest-dokumentasjonen sier at it er et alias for test. Så de er helt like fra et funksjonelt synspunkt. De eksisterer begge for å gjøre det mulig å lage en lesbar engelsk setning fra testen din.

Svar #2

De gjør det samme, men navnene deres er forskjellige, og med det deres interaksjon med navnet på testen.

test :

Det du skriver:

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

Hva du får hvis noe mislykkes:

yourModule > if it does this thing

det :

Det du skriver:

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

Hva du får hvis noe mislykkes:

yourModule > should do this thing

Så det handler om lesbarhet, ikke om funksjonalitet.

Etter min mening har det virkelig et poeng når det gjelder å lese resultatet av en test som feiler og som du ikke har skrevet selv. Det hjelper å raskere forstå hva testen handler om.

Noen utviklere forkorter også Should do this thing til Does this thing som er litt kortere og også passer semantisk til it-notasjonen.

Svar #3

Som de andre svarene har klargjort, gjør de det samme.

Jeg tror de to tilbys for å tillate enten 1) «RSpec»-stil tester som:

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

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

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

eller 2) "xUnit" stiltester som:

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

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

Dokumentasjon:

  • https://jestjs.io/docs/no/api.html#describename-fn
  • https://jestjs.io/docs/en/api.html#testname-fn-timeout

Svar #4

Som jest-dokumentasjonen sier, er de det samme: det alias

test(navn, fn, tidsavbrudd)

Også under aliaset: it(name, fn, timeout)

Og describe er bare for når du foretrekker at testene dine er organisert i grupper: describe

beskriv(navn, fn)

describe(name, fn) oppretter en blokk som grupperer flere relaterte tester sammen. For eksempel, hvis du har et myBeverage-objekt som skal være deilig, men ikke surt, kan du teste det med:

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

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

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

Dette er ikke nødvendig - du kan skrive testblokkene direkte på toppnivå. Men dette kan være nyttig hvis du foretrekker at testene dine er organisert i grupper.

Relaterte artikler