Qual é a diferença entre 'it' e 'test' in jest?

281

Eu tenho dois testes no meu grupo de teste. Um usa, o outro usa teste, e eles parecem estar funcionando de maneira muito semelhante. Qual a diferença entre eles?

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

ATUALIZAR:

Parece que testestá na API oficial do Jest , mas itnão está.

C.Lee
fonte
itpode estar lá apenas para familiaridade e migração de outras estruturas.
Andrew Li
23
não há diferença. A documentação afirma claramente que testestá sob o pseudônimo it.
Claies 20/08/19

Respostas:

397

Nos documentos que diz aqui : ité um apelido de test. Então eles são exatamente iguais.

musicformellons
fonte
34

Eles fazem a mesma coisa, mas seus nomes são diferentes e com isso sua interação com o nome do teste.

teste

O que você escreve:

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

O que você ganha se algo falhar:

yourModule > if it does this thing

isto

O que você escreve:

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

O que você ganha se algo falhar:

yourModule > should do this thing

Portanto, trata-se de legibilidade, não de funcionalidade. Na minha opinião, itrealmente faz sentido ler o resultado de um teste que você não escreveu. Isso ajuda a entender mais rapidamente do que trata o teste.

gwildu
fonte
4
Alguns também preferem it('does this thing', () => {})em vez de it('should do this thing', () => {}como seu mais curto
gwildu
Alternativamente, test('thing should do x')pode ser preferido em relação ao it('Should do X')que itgeralmente é vago.
mikemaccana 6/03
21

Como as outras respostas esclareceram, elas fazem a mesma coisa.

Eu acredito que os dois são oferecidos para permitir 1) testes no estilo " RSpec ", como:

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

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

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

ou 2) testes de estilo " xUnit ", como:

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

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

Documentos:

Rico
fonte
2

como diz o jest docs, eles são os mesmos: https://jestjs.io/docs/en/api#testname-fn-timeout

teste (nome, fn, tempo limite)

Também sob o alias: it (nome, fn, timeout)

e descrever é apenas para quando você prefere que seus testes sejam organizados em grupos: https://jestjs.io/docs/en/api#describename-fn

descrever (nome, fn)

describe(name, fn)cria um bloco que agrupa vários testes relacionados. Por exemplo, se você tiver um objeto myBeverage que deve ser delicioso, mas não azedo, poderá testá-lo com:

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

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

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

Isso não é necessário - você pode escrever os blocos de teste diretamente no nível superior. Mas isso pode ser útil se você preferir que seus testes sejam organizados em grupos.

SeyyedKhandon
fonte
-4

Jest não mencionou por que eles têm duas versões para a mesma funcionalidade exata. Meu palpite é que é apenas por convenção. teste para testes unitários para testes de integração.

borato de kishor
fonte
-22

Eles são a mesma coisa. Estou usando o TypeScript como a linguagem de programação e, quando olho para o arquivo de definição do código-fonte do pacote jest em /@types/jest/index.d.ts, vejo os seguintes códigos. Obviamente, existem muitos nomes diferentes de 'teste', você pode usar qualquer um deles.

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;

杨正云
fonte
25
O código que você mostra não indica isso ite testé a mesma coisa. Significa apenas que o tipo deles é o mesmo. Eu não acho isso beforeAlle afterAllsão a mesma coisa, embora seu tipo seja o mesmo.
realUser404
2
xit and xtestpula os testes, it, fit, testsão para executar testes. Obrigado pela sua resposta.
Akash