开玩笑的“ it”和“ test”有什么区别?


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

更新:

似乎testJest的官方API中,但it不是。


it可能只是为了熟悉和从其他框架迁移而来。
安德鲁·李

23
没有区别。该文档明确指出test在别名下it
Claies

Answers:



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

正如其他答案所阐明的,它们做同样的事情。

我相信提供这两种方法是为了允许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);
});

文件:


2

正如玩笑的文档所说,它们是相同的:https : //jestjs.io/docs/en/api#testname-fn-timeout

测试(名称,fn,超时)

同样在别名下:it(name,fn,timeout)

并描述仅适用于您希望将测试分为几组的情况:https : //jestjs.io/docs/en/api#describename-fn

describe(名称,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作为编程语言,当我从/@types/jest/index.d.ts的jest包源代码中查看定义文件时,可以看到以下代码。显然,“测试”有许多不同的名称,您可以使用其中任何一个。

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
您显示的代码并不表示相同ittest而是相同的。这仅表示它们的类型相同。我不认为这beforeAllafterAll是即使他们的类型是一样一样的东西。
realUser404 '18

2
xit and xtest跳过测试,it, fit, test执行测试。感谢您的回答。
阿卡什(Akash),
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.