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
?
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
?
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() { ... });
});
});
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.
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.
Think simple that describe
is group and it
or test
is really unit test.
So, describe
can be nested in describe
but it
isn't.