Programing

Mocha에서 describe ()의 역할은 무엇입니까?

crosscheck 2020. 11. 25. 07:39
반응형

Mocha에서 describe ()의 역할은 무엇입니까?


공식 Mocha 사이트 의 문서 에는 다음 예가 포함되어 있습니다.

describe('User', function(){
  describe('#save()', function(){
    it('should save without error', function(done){
      var user = new User('Luna');
      user.save(function(err){
        if (err) throw err;
        done();
      });
    })
  })
})

describe함수에 내 테스트를 중첩해야하는시기 와 기본 목적이 무엇인지 알고 싶습니다 describe. describe프로그래밍 언어의 주석에 전달 된 첫 번째 인수를 비교할 수 있습니까 ? describe콘솔의 출력 에는 아무것도 표시되지 않습니다 . 가독성 목적으로 만 사용됩니까, 아니면이 기능에 다른 용도가 있습니까?

이렇게 사용하면 문제가 있나요?

describe('User', function(){
    describe('#save()', function(){
        var user = new User('Luna');
        user.save(function(err){
            if (err) throw err;
            done();
        })
    })
})

이렇게하면 테스트는 통과합니다.


it호출은 각각의 개별 테스트를 식별하지만 자체적으로 it테스트 스위트가되는 방법에 대한 모카 아무것도 말하지 않는 구조를 . describe호출 을 사용하는 방법 은 테스트 스위트에 구조를 제공합니다. 다음은 describe테스트 스위트를 구조화 하는 데 사용 하는 몇 가지 작업입니다 . 다음은 논의를 위해 단순화 된 테스트 스위트의 예입니다.

function Foo() {
}

describe("Foo", function () {
    var foo;
    beforeEach(function () {
        foo = new Foo();
    });
    describe("#clone", function () {
        beforeEach(function () {
            // Some other hook
        });
        it("clones the object", function () {
        });
    });
    describe("#equals", function () {
        it("returns true when the object passed is the same", function () {
        });
        it("returns false, when...", function () {
        });
    });
    afterEach(function () {
        // Destroy the foo that was created.
        // foo.destroy();
    });
});

function Bar() {
}

describe("Bar", function () {
    describe("#clone", function () {
        it("clones the object", function () {
        });
    });
});

그 상상 Foo하고 Bar본격적인 클래스입니다. Foohas cloneequals방법. Bar있습니다 clone. 위에있는 구조는 이러한 클래스에 대한 테스트를 구조화하는 한 가지 가능한 방법입니다.

(이 #표기법은 인스턴스 필드를 나타 내기 위해 일부 시스템 (예 : jsdoc)에서 사용됩니다. 따라서 메서드 이름과 함께 사용할 때 호출되는 클래스 메서드가 아니라 클래스의 인스턴스에서 호출되는 메서드를 나타냅니다. 클래스 자체에서). 테스트 스위트는 #.) 없이도 잘 실행됩니다 .)

배너 제공

Mocha의 일부 기자는 describe자신이 작성한 보고서에서 귀하가 지정한 이름을 보여줍니다 . 예를 들어 spec리포터 (를 실행하여 사용할 수 있음 $ mocha -R spec)는 다음을보고합니다.

  Foo
    #clone
      ✓ clones the object 
    #equals
      ✓ returns true when the object passed is the same 
      ✓ returns false, when... 

  Bar
    #clone
      ✓ clones the object 


  4 passing (4ms)

실행할 부품 선택 도움말

일부 테스트 만 실행하려면 --grep옵션을 사용할 수 있습니다 . 따라서 Bar클래스 에만 관심이 있다면을 수행 $ mocha -R spec --grep Bar하고 출력을 얻을 수 있습니다 .

  Bar
    #clone
      ✓ clones the object 


  1 passing (4ms)

Or if you care only about the clone methods of all classes, then $ mocha -R spec --grep '\bclone\b' and get the output:

  Foo
    #clone
      ✓ clones the object 

  Bar
    #clone
      ✓ clones the object 


  2 passing (5ms)

The value given to --grep is interpreted as a regex so when I pass \bclone\b I'm asking only for the word clone, and not things like clones or cloned.

Provide Hooks

In the example above the beforeEach and afterEach calls are hooks. Each hook affects the it calls that are inside the describe call which is the parent of the hook. The various hooks are:

  • beforeEach which runs before each individual it inside the describe call.

  • afterEach which runs after each individual it inside the describe call.

  • before which runs once before any of the individual it inside the describe call is run.

  • after which runs once after all the individual it inside the describe call are run.

These hooks can be used to acquire resources or create data structures needed for the tests and then release resources or destroy these structures (if needed) after the tests are done.

The snippet you show at the end of your question won't generate an error but it does not actually contain any test, because tests are defined by it.


To my knowledge, describe is really just there for humans... So we can see different areas of the app. You can nest describe n levels deep.

describe('user',function(){
    describe('create',function(){}
});

It's hard to add to Louis' excellent answer. There are a couple of advantages of the describe block that he didn't mention which are the skip and only functions.

describe.skip(...) {
...
}

will skip this describe and all its nested describe and it functions while:

describe.only(...) {
...
}

will only execute that describe and its nested describe and it functions. The skip() and only() modifiers can also be applied to the it() functions.


Describe is just used for the sake of understanding the purpose of the tests , it is also used to logically group the tests . Lets say you are testing the database API's , all the database tests could come under the outer describe , so the outer describe logically groups all the database related . Lets say there are 10 database related API's to test , each of the inner describe functions defines what those tests are ....


The particular role of describe is to indicate which component is being tested and which method of that component is also being tested.

for example, lets say we have a User Prototype

var User = function() {
    const self = this;

    function setName(name) {
        self.name = name
    }

    function getName(name) {
        return self.name;
    }


    return{setName, getName};
}

module.exports = User;

And it needs to be tested, so a spec file is created for unit test

var assert = require('assert');
var User = require("../controllers/user.controller");

describe("User", function() {
    describe('setName', function() {
        it("should set the name on user", function() {
            const pedro = new User();

            name = "Pedro"
            pedro.setName(name);
            assert(pedro.getName(), name);
        });
    });
});

It is easy to see that the purpose of describe is indicating the component to be tested and the nested describe methods indicate which methods needs to be tested

참고URL : https://stackoverflow.com/questions/19298118/what-is-the-role-of-describe-in-mocha

반응형