Mocha BDD 인터페이스

Mocha BDD 인터페이스 (describe / it)

BDD는 Behavior-Driven-Development, 즉 '행동 주도 개발'의 줄임말이에요. 테스트를 구현 세부가 아니라 사용자가 기대하는 행동 관점에서 서술하는 방식이죠. Mocha에서는 이 BDD 인터페이스가 기본값이라 특별히 설정하지 않아도 바로 쓸 수 있어요. 이 인터페이스가 주는 함수들만 익혀 두면 테스트를 자연스러운 문장처럼 읽어 내려갈 수 있습니다.

출처: Mocha — BDD 인터페이스

제공되는 함수

BDD 인터페이스는 테스트를 묶고 선언하고 준비하는 함수들을 이렇게 나눠 줘요.

  • describe() · context() — 테스트 묶음(스위트)을 정의해요
  • it() · specify() — 실제 테스트 케이스를 정의해요
  • before() · after() · beforeEach() · afterEach() — 테스트 전후 준비와 정리(훅)를 담당해요

여기서 context()describe()의 별칭(alias)이고, specify()it()의 별칭이에요. 이름만 다를 뿐 동작은 똑같죠. 다만 같은 구조를 두 가지 이름으로 쓸 수 있게 둔 덕분에, 테스트가 훨씬 읽기 쉽게 조직되는 경우가 많아요.

예시로 보는 구조

아래 예시처럼 스위트를 중첩하고, 그 안에서 조건을 context()로 나누고, 각 기대값을 it()으로 표현하면 테스트가 문장처럼 읽혀요.

describe("Array", function () {
  before(function () {
    // ...
  });

  describe("#indexOf()", function () {
    context("when not present", function () {
      it("should not throw an error", function () {
        (function () {
          [1, 2, 3].indexOf(4);
        }).should.not.throw();
      });
      it("should return -1", function () {
        [1, 2, 3].indexOf(4).should.equal(-1);
      });
    });

    context("when present", function () {
      it("should return the index where the element first appears in the array", function () {
        [1, 2, 3].indexOf(3).should.equal(2);
      });
    });
  });
});

describe("Array")처럼 위에서 테마를 잡고, describe("#indexOf()")로 세부 기능을 짚고, context("when not present")로 상황을 구분하는 식이에요. 이렇게 단계를 나누면 어떤 조건에서 무엇을 기대하는지 한눈에 들어와요.

더 알아보기 (Learn more)