В чем разница между «это» и «тест» в шутку?

282

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

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нет.

C.Lee
источник
itможет быть просто для знакомства и миграции из других структур.
Эндрю Ли
23
нет никакой разницы. В документации четко указано, что testнаходится под псевдонимом it.
Клай

Ответы:

35

Они делают то же самое, но их имена разные, и с этим их взаимодействие с именем теста.

тест

Что ты пишешь:

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действительно есть смысл читать результат неудачного теста, который вы сами не написали. Это помогает быстрее понять, о чем идет речь.

gwildu
источник
4
некоторые также предпочитают it('does this thing', () => {})вместо it('should do this thing', () => {}его более короткого
gwildu
В качестве альтернативы, test('thing should do x')может быть более предпочтительным , чем , it('Should do X')как itчасто является неопределенным.
mikemaccana
21

Как выяснили другие ответы, они делают то же самое.

Я полагаю, что оба предложены для 1) тестов в стиле " 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);
});

Docs:

Богатый
источник
2

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

тест (имя, имя, тайм-аут)

Также под псевдонимом: это (имя, фн, тайм-аут)

и описывать только для того, когда вы предпочитаете, чтобы ваши тесты были организованы в группы: https://jestjs.io/docs/en/api#describename-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();
  });
});

Это не обязательно - вы можете написать тестовые блоки непосредственно на верхнем уровне. Но это может быть удобно, если вы предпочитаете, чтобы ваши тесты были организованы в группы.

SeyyedKhandon
источник
-4

Джест не упомянул, почему у них есть две версии для одинаковой функциональности. Я думаю, это только для конвенции. тест для юнит-тестов это для интеграционных тестов.

Кишор Борат
источник
-22

Это одно и то же. Я использую TypeScript в качестве языка программирования, и когда я смотрю на файл определения из исходного кода пакета jest из /@types/jest/index.d.ts, я вижу следующие коды. Очевидно, что существует множество разных имен «тест», вы можете использовать любое из них.

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выполняет тесты. Спасибо за Ваш ответ.
Акаш