본문 바로가기

프로그래밍/Node.js

[Node.js] 테스트 프레임워크 및 부가 라이브러리 알아보기

1. Jest

1) 개요

- 간단함에 중점을 둔 자바스크립트 테스트 프레임워크

- 사용처: Babel, Typescript, Node, React, Angular, Vue 등

- Official: https://jestjs.io

 

2) 특징

- 별도의 설정 없이 사용할 수 있으며 커맨드 라인 옵션을 사용할 수 있다.

- 각각의 테스트가 독립적으로 병렬 수행 되기 때문에 빠르고 안전하다.

- --coverage 옵션을 사용하면 테스트 코드가 아닌 프로젝트 코드를 포함한 코드 커버리지 정보를 출력할 수 있다.

- 쉽게 Mock Function을 선언할 수 있다.

- Babel과 연계해서 테스트 작업을 수행할 수 있다.

 

3) 사용 방법

- 테스트 함수 선언

 

const sum = require('./sum');



test('adds 1 + 2 to equal 3', () => {

  expect(sum(1, 2)).toBe(3);

});

 

- 테스트 실행

 

>  jest




2. Mocha

1) 개요

- Node.js 및 브라우저에서 작동하는 자바스크립트 테스트 프레임워크

- Official: https://mochajs.org/#running-mocha-in-the-browser

 

2) 특징

- 비동기 방식의 테스트를 간단하게 생성 가능

- 브라우저상에서 시각화해서 사용할 수 있다.

- 자체적으로 Assertion을 지원하지 않기 때문에 Assertion 라이브러리와 함께 사용해야 함

- 주로 Mocha와 Chai를 결합해서 사용

 

3) 사용 방법

- 테스트 함수 선언

 

// EX1

const assert = require('assert');

describe('Array', function() {

  describe('#indexOf()', function() {

    it('should return -1 when the value is not present', function() {

      assert.equal([1, 2, 3].indexOf(4), -1);

    });

  });

});



// EX2

describe('Array', function() {

  describe('#indexOf()', function() {

    it('should return -1 when the value is not present', function() {

      [1, 2, 3].indexOf(5).should.equal(-1);

      [1, 2, 3].indexOf(0).should.equal(-1);

    });

  });

});



// EX3

beforeEach(async function() {

  await db.clear();

  await db.save([tobi, loki, jane]);

});



describe('#find()', function() {

  it('responds with matching records', async function() {

    const users = await db.find({type: 'User'});

    users.should.have.length(3);

  });

});

 

- 테스트 실행

 

>  mocha

 

- Hooks

 

describe('hooks', function() {



  before(function() {

    // 블록 범위 내 모든 테스트 전에 실행

  });



  after(function() {

    // 블록 범위 내 모든 테스트 후에 실행

  });



  beforeEach(function() {

    // 블록 범위 내 각 테스트 직전에 실행

  });



  afterEach(function() {

    // 블록 범위 내 각 테스트 직후에 실행

  });



  // test cases

});

 

4) Chai

- BDD / TDD Assertion Library

- Official: https://www.chaijs.com/

- Mocha에 종속된 라이브러리는 아니지만 Mocha에 Assertion Libarary가 제공되지 않아서 함께 첨부

- 사용 방법

 

// Should

chai.should();



foo.should.be.a('string');

foo.should.equal('bar');

foo.should.have.lengthOf(3);

tea.should.have.property('flavors')

  .with.lengthOf(3);



// Expect

var expect = chai.expect;



expect(foo).to.be.a('string');

expect(foo).to.equal('bar');

expect(foo).to.have.lengthOf(3);

expect(tea).to.have.property('flavors')

  .with.lengthOf(3);



// Assert

var assert = chai.assert;



assert.typeOf(foo, 'string');

assert.equal(foo, 'bar');

assert.lengthOf(foo, 3)

assert.property(tea, 'flavors');

assert.lengthOf(tea.flavors, 3);



3. Jasmine

1) 개요

- 행동 주도를 지향하는 자바스크립트 테스트 프레임워크

- Official: https://jasmine.github.io/index.html

 

2) 특징

- Karma와의 연동을 통해 브라우저 시각화 가능(앵귤러 기본 스펙)

 

3) 사용 방법

- 테스트 함수 선언

 

describe("A suite is just a function", function() {

  var a;



  it("and so is a spec", function() {

    a = true;



    expect(a).toBe(true);

  });

});

    

- 테스트 실행

 

>  Jasmine

4) Karma

- Productive 테스트 환경 제공

- Official: https://karma-runner.github.io

- 브라우저 혹은 디바이스에서 테스트 가능

- Jasmine, Mocha, Qunit 등 다양한 테스트 프레임워크 함께 사용 가능

- 웹스톰 혹은 크롬과 함께 쉬운 디버깅 가능

- 사용 방법

 

// 초기화 및 연동할 테스트 프레임워크 설정(설정 파일 자동 생성)

> node_modules/.bin/karma init 

 

 

// 테스트 실행

> node_modules/.bin/karma start

 

4. 총 평

1) 총 평

- 전부 사용해본 결과 많은 테스트 프레임워크가 있지만 사용 방법은 모두 비슷하다.

- 연계 라이브러리와 호환성이 좋은 테스트 프레임워크를 선택하는게 좋다.