Jaka jest różnica między „to” a „test” w żartach?

279

Mam dwie testy w mojej grupie testowej. Jeden używa go, drugi używa testu i wydaje się, że działają one bardzo podobnie. Jaka jest różnica między nimi?

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

AKTUALIZACJA:

Wygląda na testto, że jest w oficjalnym interfejsie API Jest , ale go itnie ma.

C.Lee
źródło
itmoże być tam tylko dla znajomości i migracji z innych frameworków.
Andrew Li,
23
nie ma różnicy. Dokumentacja wyraźnie stwierdza, że testjest pod pseudonimem it.
Claies

Odpowiedzi:

34

Robią to samo, ale ich nazwy są różne, a tym samym ich interakcja z nazwą testu.

test

Co piszesz:

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

Co otrzymasz, jeśli coś zawiedzie:

yourModule > if it does this thing

to

Co piszesz:

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

Co otrzymasz, jeśli coś zawiedzie:

yourModule > should do this thing

Chodzi więc o czytelność, a nie o funkcjonalność. Moim zdaniem itnaprawdę ma sens odczytanie wyniku nieudanego testu, którego sam nie napisałeś. Pomaga szybciej zrozumieć, o co chodzi w teście.

gwildu
źródło
4
niektórzy wolą też it('does this thing', () => {})niż it('should do this thing', () => {}krótszy
gwildu
Alternatywnie test('thing should do x')może być preferowany, it('Should do X')ponieważ itjest to często niejasne.
mikemaccana
21

Jak wyjaśniły inne odpowiedzi, robią to samo.

Uważam, że oba są oferowane, aby pozwolić na 1) testy w stylu „ RSpec ”, takie jak:

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

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

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

lub 2) testy stylu „ xUnit ”, takie jak:

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

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

Dokumenty:

Bogaty
źródło
2

jak mówi dokument jest, są takie same: https://jestjs.io/docs/en/api#testname-fn-timeout

test (nazwa, fn, limit czasu)

Również pod aliasem: it (nazwa, fn, limit czasu)

i opisz to tylko wtedy, gdy wolisz, aby twoje testy były zorganizowane w grupy: https://jestjs.io/docs/en/api#describename-fn

opisz (nazwa, fn)

describe(name, fn)tworzy blok, który grupuje kilka powiązanych testów. Na przykład, jeśli masz obiekt myBeverage, który powinien być pyszny, ale nie kwaśny, możesz go przetestować za pomocą:

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

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

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

Nie jest to wymagane - możesz pisać bloki testowe bezpośrednio na najwyższym poziomie. Może to być jednak przydatne, jeśli wolisz, aby testy były zorganizowane w grupy.

SeyyedKhandon
źródło
-4

Nie wspomniałem, dlaczego mają dwie wersje o dokładnie takiej samej funkcjonalności. Domyślam się, że to tylko na konwencji. test dla testów jednostkowych dla testów integracyjnych.

Kishor Borate
źródło
-22

To są te same rzeczy. Używam TypeScript jako języka programowania, a gdy patrzę na plik definicji z kodu źródłowego pakietu jest z /@types/jest/index.d.ts, widzę następujące kody. Oczywiście istnieje wiele różnych nazw „testów”, możesz użyć dowolnej z nich.

declare var beforeAll: jest.Lifecycle;
declare var beforeEach: jest.Lifecycle;
declare var afterAll: jest.Lifecycle;
declare var afterEach: jest.Lifecycle;
declare var describe: jest.Describe;
declare var fdescribe: jest.Describe;
declare var xdescribe: jest.Describe;
declare var it: jest.It;
declare var fit: jest.It;
declare var xit: jest.It;
declare var test: jest.It;
declare var xtest: jest.It;

杨正云
źródło
25
Kod, który wyświetlasz, nie oznacza tego iti testsą tym samym. Oznacza to po prostu, że ich typ jest taki sam. Nie sądzę beforeAlli afterAllsą takie same, mimo że ich typ jest taki sam.
realUser404
2
xit and xtestpomija testy, it, fit, testwykonuje testy. Dziękuję za odpowiedź.
Akash