[javascript] Jasmine 테스트에 대한 모범 사례 및 권장 사항

Jasmine은 자바스크립트를 위한 BDD (Behavior-Driven Development) 테스트 프레임워크로, 코드의 동작을 검증하는 데 사용됩니다. 이번 글에서는 Jasmine을 사용할 때의 모범 사례와 권장 사항을 살펴보겠습니다.

1. 테스트 스위트와 스펙 구조

Jasmine은 테스트 스위트와 스펙으로 구성됩니다. 테스트 스위트는 연관된 테스트들을 그룹화하는 역할을 합니다. 스펙은 테스트의 단위입니다. 이 구조를 잘 활용하는 것이 모범 사례입니다.

describe('테스트 스위트 이름', function() {
  it('테스트 스펙 1', function() {
    // 테스트 코드 작성
  });

  it('테스트 스펙 2', function() {
    // 테스트 코드 작성
  });
});

테스트 스위트의 이름은 명확하게 지정하고, 각 스펙은 테스트할 동작에 대한 설명을 포함해야 합니다.

2. expect문 사용하기

Jasmine에서는 expect문을 사용하여 특정 값의 기대 결과를 확인합니다. 이때, 각 expect문은 하나의 기대 결과만을 포함해야 합니다.

expect(value).toBe(expected);

toBe는 일치하는지 여부를 확인하는 matcher 중 하나입니다. 다른 matcher들도 제공되므로, 특정한 의도를 가진 matcher를 선택해서 사용해야 합니다.

3. 비동기 코드 테스트

비동기 코드를 테스트할 때는 Jasmine의 done 파라미터나 async/await를 활용하여 테스트의 완료를 알려줘야 합니다. done 파라미터는 콜백 함수 내에서 호출되어야 합니다.

it('비동기 코드 테스트', function(done) {
  asyncFunction().then(function(result) {
    expect(result).toBe(expected);
    done();
  });
});

it('비동기 코드 테스트 (async/await)', async function() {
  const result = await asyncFunction();
  expect(result).toBe(expected);
});

4. 스파이와 모의 객체 사용하기

Jasmine에서는 스파이와 모의 객체를 활용하여 다른 객체나 함수를 대체하여 테스트할 수 있습니다. 이를 통해 의존성을 제어하고 특정 상황을 시뮬레이션할 수 있습니다.

it('스파이와 모의 객체 예제', function() {
  const spy = jasmine.createSpy('spy');
  const mockObject = jasmine.createSpyObj('mockObject', ['method1', 'method2']);

  spy();
  expect(spy).toHaveBeenCalled();

  mockObject.method1();
  mockObject.method2();
  expect(mockObject.method1).toHaveBeenCalled();
  expect(mockObject.method2).toHaveBeenCalled();
});

5. BeforeEach와 AfterEach 사용하기

Jasmine에서는 beforeEach와 afterEach를 사용하여 각 스펙의 실행 전과 실행 후에 공통적으로 필요한 동작을 설정할 수 있습니다. 이를 통해 코드 중복을 피하고, 테스트 환경을 관리할 수 있습니다.

describe('테스트 스위트', function() {
  beforeEach(function() {
    // 각 스펙 실행 전 수행할 동작
  });

  afterEach(function() {
    // 각 스펙 실행 후 수행할 동작
  });

  it('스펙 1', function() {
    // 테스트 코드 작성
  });

  it('스펙 2', function() {
    // 테스트 코드 작성
  });
});

6. 테스트 결과 보고서 확인하기

Jasmine은 기본적으로 콘솔에 테스트 결과를 출력합니다. 그러나 테스트 결과를 더 쉽게 확인하기 위해 다양한 보고서 플러그인을 사용할 수도 있습니다. 예를 들어, Jasmine HTML Reporter는 테스트 결과를 HTML 형식으로 출력합니다.

7. 추가 자료

Jasmine을 사용하여 테스트 코드를 작성할 때에는 위의 모범 사례와 권장 사항을 따라가는 것이 중요합니다. 이를 통해 읽기 쉽고 유지보수하기 쉬운 테스트 코드를 작성할 수 있습니다.