ChatGPT解决这个技术问题 Extra ChatGPT

What is the difference between describe and it in Jest?

When writing a unit test in Jest or Jasmine when do you use describe?

When do you use it?

I usually do

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

When is it time for a new describe or a new it?


D
David Schumann

describe breaks your test suite into components. Depending on your test strategy, you might have a describe for each function in your class, each module of your plugin, or each user-facing piece of functionality.

You can also nest describes to further subdivide the suite.

it is where you perform individual tests. You should be able to describe each test like a little sentence, such as "it calculates the area when the radius is set". You shouldn't be able to subdivide tests further-- if you feel like you need to, use describe instead.

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() { ... });
  });
});

S
SeyyedKhandon

As I mentioned in this question, describe is for grouping, it is for testing.

As the jest docs says, test and it are the same: https://jestjs.io/docs/en/api#testname-fn-timeout

test(name, fn, timeout) Also under the alias: it(name, fn, timeout)

and describe is just for when you prefer your tests to be organized into groups: https://jestjs.io/docs/en/api#describename-fn

describe(name, fn)

describe(name, fn) creates a block that groups together several related tests. For example, if you have a myBeverage object that is supposed to be delicious but not sour, you could test it with:

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

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

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

This isn't required - you can write the test blocks directly at the top level. But this can be handy if you prefer your tests to be organized into groups.


M
MattG

I consider this more from the impact on the test output. By using describe or multiple levels of describe you can group your output for readability.