У чому полягає різниця між "це" і "тест" в жарті?


279

У мене в тестовій групі два тести. Один використовує його, інший використовує тест, і вони, схоже, працюють дуже аналогічно. У чому різниця між ними?

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

ОНОВЛЕННЯ:

Здається, це testє в офіційному API Jest , але itце не так.


itможливо, просто знайдеться там для знайомства та міграції з інших рамок.
Ендрю Лі

23
різниці немає. У документації чітко зазначено, що вона testзнаходиться під псевдонімом it.
Claies

Відповіді:



34

Вони роблять те ж саме, але їхні назви різні і відповідно до їх взаємодії з назвою тесту.

тест

Що ви пишете:

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

Що ви отримуєте, якщо щось не вдається:

yourModule > if it does this thing

це

Що ви пишете:

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

Що ви отримуєте, якщо щось не вдається:

yourModule > should do this thing

Тож мова йде про читабельність, а не про функціональність. На мою думку, itдійсно є сенс, коли потрібно прочитати результат невдалого тесту, який ви самі не написали. Це допомагає швидше зрозуміти, про що йдеться у тесті.


4
Деякі також вважають за краще it('does this thing', () => {})замість цього it('should do this thing', () => {}коротше
gwildu

Альтернативно, test('thing should do x')можна віддавати перевагу над, it('Should do X')як itце часто нечітко.
mikemaccana

21

Як уточнили інші відповіді, вони роблять те саме.

Я вважаю, що двом пропонується дозволити будь-які тести стилю " RSpec ", такі як:

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

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

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

або 2) тести стилю " xUnit ", такі як:

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

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

Документи:


2

як кажуть жарт документи, вони однакові: https://jestjs.io/docs/en/api#testname-fn-timeout

тест (ім'я, fn, час очікування)

Також під псевдонімом: це (ім'я, fn, час очікування)

і описувати це лише тоді, коли ви віддаєте перевагу тестам, які слід організувати в групи: https://jestjs.io/docs/en/api#describename-fn

опишіть (ім'я, fn)

describe(name, fn)створює блок, який об'єднує декілька пов'язаних тестів. Наприклад, якщо у вас є об'єкт myBeverage, який повинен бути смачним, але не кислим, ви можете перевірити його за допомогою:

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

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

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

Це не потрібно - ви можете записувати тестові блоки безпосередньо на верхньому рівні. Але це може бути корисно, якщо ви віддаєте перевагу тестам, які будуть організовані в групи.


-4

Jest не згадав, чому вони мають дві версії для точно такого ж функціоналу. Я здогадуюсь, це лише для конвенції. тест для одиничних тестів - це для інтеграційних тестів.


-22

Вони те саме. Я використовую TypeScript як мову програмування, і коли я дивлюсь у файл визначення з вихідного коду пакета vice від /@types/jest/index.d.ts, я можу побачити наступні коди. Очевидно, що існує багато різних назв 'test', ви можете використовувати будь-яке з них.

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;


25
Показаний вами код не вказує на це, itі testце одне і те ж. Це просто означає, що їх тип однаковий. Я не думаю, що це beforeAllі afterAllє одне і те ж, хоча їх тип однаковий.
realUser404

2
xit and xtestпропускає тести, it, fit, testвиконує тести. Дякую за вашу відповідь.
Акаш
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.