我的测试组中有两个测试。其中一项测试使用it,另一项使用test。他们两个似乎工作得非常相似。它们之间有什么区别?
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似乎在Jest的官方API中,而it不在。

评论

它可能只是为了熟悉和从其他框架迁移而来。

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

#1 楼

Jest文档状态ittest的别名。所以它们是完全一样的。

#2 楼

它们做的是相同的事情,但是它们的名称不同,并且它们与测试名称的交互也不同。 override“> test
如果出现故障,您会得到什么:您编写的内容:
 describe('yourModule', () => {
  test('if it does this thing', () => {});
  test('if it does the other thing', () => {});
});
 

如果出现故障,您会得到什么:
 yourModule > if it does this thing
 

所以,这是关于可读性,而不是功能。写你自己。它有助于更​​快地了解测试的含义。

评论


有些人更喜欢它(“做这个事”,()=> {}),而不是它(“应该做这个事”,()=> {})

– gwildu
19/12/24在15:01



另外,由于test('应该做x')比它('应该做X')更为可取,因为它通常很模糊。

–mikemaccana
20 Mar 6 '20 at 16:31

@mikemaccana,如果您编写test(“东西应该做x”),则您没有语义正确的句子。我认为这些表示法背后的想法确实是,您可以按照自己的意愿阅读句子中的测试。如果您编写测试(“做这件事”),则相同。当然,您可以这样做,但是该符号在语义上实际上适合于该符号

– gwildu
20-11-10在7:32



test(“某事应该做X”)实际上是“测试该事应该做X”-因此测试读起来就像一个人说话。 test('x'做的事)也可以。

–mikemaccana
20 Nov 10 '14:43

#3 楼

正如其他答案所阐明的,它们也做同样的事情。样式测试,例如:
const myBeverage = {
  delicious: true,
  sour: false,
};

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

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

文档:

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


#4 楼

正如玩笑的文档所述,它们是相同的:
it别名

test(name,fn,timeout)
也使用别名:it(name,fn,timeout)

describe仅适用于您希望将测试组织成组的情况:
描述

describe(name,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();
  });
});

这不是必需的-您可以直接在顶部编写测试块水平。但是,如果您希望将测试组织成组,这会很方便。

#5 楼

笑话没有提到为什么它们有两个版本具有完全相同的功能。 test用于单元测试,而it用于集成测试。

#6 楼

他们是一样的东西。我使用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; 




评论


您显示的代码并不表示它与测试相同。这仅表示它们的类型相同。我不认为beforeAll和afterAll是相同的东西,即使它们的类型相同。

– realUser404
18年4月16日在20:56

xit和xtest跳过测试,it,fit,test将执行测试。感谢您的回答。

– Aakash
19年11月17日在5:54