在Jest中“it”和“test”有什么区别?

x6492ojm  于 2022-12-08  发布在  Jest
关注(0)|答案(8)|浏览(875)

I have two tests in my test group. One of the tests use it and the other one uses test . Both of them seem to be working very similarly. What is the difference between them?

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

Update - Nov 2022:

It seems that test and it is interchangeable according to the official API of Jest . As @gwildu described here , you should choose one over the other for the sake of readability.

mbyulnm0

mbyulnm01#

Jest docs状态ittest的别名。所以从功能的Angular 来看,它们是完全相同的。它们的存在都是为了使你的测试能够产生一个可读的英语句子。

56lgkhnf

56lgkhnf2#

他们做同样的事情,但他们的名字不同,他们的互动与测试的名字不同。

第一个月第一个月

你写的东西:

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在阅读一个你没有自己编写的失败测试的结果时确实有其意义,它有助于更快地理解测试的内容。
一些开发人员还将Should do this thing缩短为Does this thingDoes this thing稍短,并且在语义上也适合it表示法。

c0vxltue

c0vxltue3#

正如其他答案所阐明的那样,它们做的是同样的事情。
我相信这两个选项是为了允许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);
});

文件:

  • https://jestjs.io/docs/en/api.html#describename-fn
  • https://jestjs.io/docs/en/api.html#testname-fn-timeout
qvtsj1bj

qvtsj1bj4#

正如笑话文档所说,它们是相同的:它别名

测试(名称,fn,超时)

别名:it(名称,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();
  });
});

这并不是必须的--你可以直接在顶层编写测试块,但是如果你更喜欢把你的测试组织成组,这会很方便。

xoefb8l8

xoefb8l85#

您可以将it()替换为xit(),以暂时排除正在执行的测试;使用it()xit()比使用test()xit()更有说服力。
参见聚焦和排除测试

w8f9ii69

w8f9ii696#

以下是该文档的摘录:链接
test(name, fn, timeout)
别名:it(name, fn, timeout)
在测试文件中,你只需要运行测试的测试方法。例如,假设有一个函数inchesOfRain()应该为零。你的整个测试可以是:......

bn31dyow

bn31dyow7#

Jest haven't mentioned why they have two versions for the exact same functionality.
My guess is, it's only for convention. test is for unit tests, and it is for integration tests.

3phpmpom

3phpmpom8#

我使用TypeScript作为编程语言,当我从/@types/jest/index.d.ts的Jest包源代码中查看定义文件时,我可以看到下面的代码。
显然,“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;

相关问题