Javascript ';它';和';测试';开玩笑?

Javascript ';它';和';测试';开玩笑?,javascript,unit-testing,jestjs,Javascript,Unit Testing,Jestjs,我的测试组有两个测试。其中一个测试使用it,另一个测试使用test。他们两人的工作方式似乎非常相似。他们之间有什么区别 describe('updateAll', () => { it('no force', () => { return updateAll(TableName, ["fileName"], {compandId: "test"}) .then(updatedItems => {

我的测试组有两个测试。其中一个测试使用
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);
        })
  });
});


似乎
测试
处于,但
不处于。

状态。所以它们是完全相同的。

它们是相同的东西。我使用TypeScript作为编程语言,当我查看来自/@types/Jest/index.d.ts的Jest包源代码中的定义文件时,我可以看到以下代码

显然,“test”有很多不同的名称,您可以使用其中任何一个

beforeAll声明变量:jest.Lifecycle;
在每个之前声明var:jest.Lifecycle;
毕竟声明var:jest.Lifecycle;
每次之后声明var:jest.Lifecycle;
声明变量descripe:jest.descripe;
声明变量描述:开玩笑,描述;
声明变量xdescripe:jest.descripe;
声明它:开玩笑,它;
声明var-fit:jest.It;
声明var-xit:jest.It;
声明var测试:jest.It;

声明var xtest:jest.It正如其他答案所阐明的那样,他们做了同样的事情

我相信这两种测试都是为了进行1)“风格测试,比如:

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

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

  it('is not sour', () => {
    expect(myBeverage.sour).toBeFalsy();
  });
});
function sum(a, b) {
  return a + b;
}

test('sum adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3);
});
或2)“风格测试,如:

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

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

  it('is not sour', () => {
    expect(myBeverage.sour).toBeFalsy();
  });
});
function sum(a, b) {
  return a + b;
}

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


它们做相同的事情,但它们的名称不同,因此它们与测试名称的交互也不同

测试

你写的是:

description('yourModule',()=>{
test('if it this',()=>{});
test('如果它做了另一件事',()=>{});
});
如果出现故障,您会得到什么:

yourModule>如果它做了这件事
it

你写的是:

description('yourModule',()=>{
它('应该做这件事',()=>{});
它('应该做另一件事',()=>{});
});
如果出现故障,您会得到什么:

yourModule>应该做这件事
因此,它是关于可读性,而不是功能性

在我看来,
it
在阅读您自己没有编写的失败测试的结果时确实有一定的意义。这有助于更快地了解测试的内容


一些开发人员还将
应该做这件事
缩短为
做这件事
,这稍微短一点,在语义上也符合
it
符号。

Jest没有提到为什么它们有两个版本来实现完全相同的功能


我猜,这只是惯例<代码>测试
用于单元测试,
用于集成测试。

正如jest文档所说,它们是相同的:

测试(名称、fn、超时)

别名下还有:it(名称、fn、超时)

description
仅适用于您希望将测试分组的情况:

描述(名称,fn)

descripe(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();
  });
});
这不是必需的-您可以直接在顶层编写测试块。但是,如果您希望将测试组织到组中,这将非常方便。

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


请参见

,它可能只是为了熟悉和从其他框架迁移而存在。没有区别。文档中明确说明
test
位于别名
it
下。您显示的代码并不表示
it
test
是同一件事。这只是意味着他们的类型是一样的。我不认为
之前
之后
是同一件事,即使它们的类型相同。
xit和xtest
跳过测试,
it、fit、test
执行测试。谢谢你的回答。有些人也更喜欢
it('doesthing',()=>{})而不是
it('shouldothing',()=>{}
作为它的简称,
test('thingshouldox')
可能比
it('shouldox')
更受欢迎,因为
it
通常是模糊的。@mikemacana如果你写
test('thing should do x')
你没有一个语义正确的句子。我认为这些符号背后的想法是,你可以像说话一样读句子中的测试。如果你写
test('do this'),也一样
。当然你可以这样做,但是符号在语义上实际上适合
符号
测试('thing should do x')
是字面上的“testing that thing should do x'”,所以测试读起来就像一个人说的那样。
test('thing does x'))
也很好。我认为这个答案有点误导-
it
test
不完全相同。正如@gwilde-answer中所解释的,这些别名鼓励开发人员将测试名称写成可读的英语句子-因此随机使用
it
test
会弄糟。