[javascript] Jasmine의 테스트 케이스 작성 시 고려해야 할 Best Practice

Jasmine은 JavaScript의 유명한 테스트 프레임워크 중 하나로, 코드의 품질을 향상시키고 버그를 줄이는 데 도움을 줄 수 있습니다. 이러한 목표를 달성하기 위해 Jasmine을 사용하면서 고려해야 할 몇 가지 Best Practice를 살펴보겠습니다.

1. Describe 블록 작성

Describe 블록은 테스트 케이스를 그룹화 할 수 있는 기능으로, Describe 블록을 사용하여 관련된 테스트 케이스들을 묶을 수 있습니다. 이를 통해 코드의 의도를 명확히 표현하며 가독성을 높일 수 있습니다.

describe("Calculator", function() {
  // 테스트 케이스들을 이곳에 작성
});

2. it 블록 작성

it 블록은 개별적인 테스트 케이스를 작성하는 데 사용됩니다. 테스트 케이스를 작성할 때는 it 블록을 사용하여 테스트의 목적을 명확하게 표현해야 합니다. 이를 통해 각 테스트가 무엇을 검증하는지 이해하기 쉽고, 필요한 변경 사항이 있을 때 쉽게 수정할 수 있습니다.

describe("Calculator", function() {
  it("should add two numbers correctly", function() {
    // 테스트 코드 작성
  });

  it("should subtract two numbers correctly", function() {
    // 테스트 코드 작성
  });
});

3. Expect 문 사용

Expect 문은 테스트 결과를 확인하는 데 사용되며, 코드의 예상 동작을 검사하는 데 도움을 줍니다. 각 테스트 케이스에서는 expect 문을 사용하여 예상 결과와 실제 결과를 비교하고, 이를 통해 코드가 제대로 작동하는지 확인할 수 있습니다.

describe("Calculator", function() {
  it("should add two numbers correctly", function() {
    // 예상 결과와 실제 결과를 비교하고 확인
    expect(add(2, 2)).toEqual(4);
  });

  it("should subtract two numbers correctly", function() {
    // 예상 결과와 실제 결과를 비교하고 확인
    expect(subtract(5, 3)).toEqual(2);
  });
});

4. beforeEach와 afterEach 사용

beforeEach와 afterEach는 각각 테스트 실행 전과 후에 실행되는 코드 블록입니다. 이를 사용하여 공통적으로 수행해야 할 작업을 설정하거나 청소하는 등의 작업을 할 수 있습니다. 이를 통해 테스트 케이스 간의 의존성을 줄이고 재사용 가능한 테스트 케이스를 작성할 수 있습니다.

describe("Calculator", function() {
  let calculator;

  beforeEach(function() {
    calculator = new Calculator();
  });

  afterEach(function() {
    // 테스트 후에 필요한 작업 수행
  });

  it("should add two numbers correctly", function() {
    // 예상 결과와 실제 결과를 비교하고 확인
    expect(calculator.add(2, 2)).toEqual(4);
  });

  it("should subtract two numbers correctly", function() {
    // 예상 결과와 실제 결과를 비교하고 확인
    expect(calculator.subtract(5, 3)).toEqual(2);
  });
});

5. 스파이와 스텁 활용

Jasmine에는 스파이(spy)와 스텁(stub)이라는 기능이 있습니다. 스파이는 함수의 호출 여부와 호출 횟수 등을 확인하기 위해 사용되며, 스텁은 테스트에서 특정 함수를 가짜로 대체하여 원하는 값을 반환하도록 할 수 있습니다. 이러한 기능을 활용하여 테스트 환경을 설정하고 예상 동작을 검증할 수 있습니다.

describe("Calculator", function() {
  let calculator;

  beforeEach(function() {
    calculator = new Calculator();
  });

  it("should call the addition function", function() {
    spyOn(calculator, "add");

    calculator.calculate(2, 2);

    expect(calculator.add).toHaveBeenCalled();
  });

  it("should return 5 when calculating 2 + 3", function() {
    spyOn(calculator, "add").and.returnValue(5);

    expect(calculator.calculate(2, 3)).toEqual(5);
  });
});

Jasmine의 Best Practice를 준수하면 테스트 코드의 가독성이 높아지고 유지 보수성이 향상되는 등의 이점을 얻을 수 있습니다. 이는 테스트에서 발생하는 오류를 최소화하고 코드의 신뢰성을 높이는데 도움을 줄 것입니다.

참고 자료