Mocha BDD 인터페이스
Mocha BDD 인터페이스 (describe / it)
BDD는 Behavior-Driven-Development, 즉 '행동 주도 개발'의 줄임말이에요. 테스트를 구현 세부가 아니라 사용자가 기대하는 행동 관점에서 서술하는 방식이죠. 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")로 상황을 구분하는 식이에요. 이렇게 단계를 나누면 어떤 조건에서 무엇을 기대하는지 한눈에 들어와요.