Jest 中的 describe 和 it 有啥区别?

Posted

技术标签:

【中文标题】Jest 中的 describe 和 it 有啥区别?【英文标题】:What is the difference between describe and it in Jest?Jest 中的 describe 和 it 有什么区别? 【发布时间】:2015-11-10 09:06:12 【问题描述】:

JestJasmine 中编写单元测试时,您什么时候使用describe

你什么时候使用it

我经常这样做

describe('my beverage', () => 
  test('is delicious', () => 
  );
);

什么时候需要新的describe 或新的it

【问题讨论】:

【参考方案1】:

describe 将您的测试套件分解为组件。根据您的测试策略,您可能对类中的每个函数、插件的每个模块或每个面向用户的功能都有一个描述。

您还可以嵌套描述以进一步细分套件。

it 是您执行单个测试的地方。您应该能够像一个小句子一样描述每个测试,例如“它在设置半径时计算面积”。您不应该进一步细分测试 - 如果您觉得需要,请改用 describe

describe('Circle class', function() 
  describe('area is calculated when', function() 
    it('sets the radius', function()  ... );
    it('sets the diameter', function()  ... );
    it('sets the circumference', function()  ... );
  );
);

【讨论】:

【参考方案2】:

我更多地从对测试输出的影响来考虑这一点。通过使用 describe 或多个级别的 describe,您可以对输出进行分组以提高可读性。

【讨论】:

【参考方案3】:

正如我在question 中提到的,describe 用于分组,it 用于测试。

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

测试(名称、fn、超时)

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

describe 仅适用于您希望将测试组织成组的情况: https://jestjs.io/docs/en/api#describename-fn

描述(名称,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();
  );
);

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

【讨论】:

以上是关于Jest 中的 describe 和 it 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Java 中 给一个object 赋值属性, 既可以用构造函数的方式,也可以用setXXXX()的方式,而它们之间有啥区

从测试中自动生成文档(javascript、jest)

Jest 中的“toBe”和“toEqual”有啥区别?

如何使用 Jest 测试 Reflux 动作

带有 useEffect 的 Jest Act 警告

用 Jest 只运行一个测试