ABOUT ME

jacey.park.dev@gmail.com \n 5년차 프론트엔드 개발자

Today
-
Yesterday
-
Total
-
  • [JS] 테스트 프레임워크 Mocha.js 시작하기
    Dev/JS 2018. 4. 22. 00:50

    Javascript에서 사용할 수 있는 테스트 프레임워크인 Mocha를 사용해보자




    설치하기


    먼저, npm을 사용해서 global로 설치해 주세요



    $ npm install mocha --global



    혹은 자신의 프로젝트에 dependency로 설치해 주세요



    $ npm install mocha --save-dev



    > Mocha 3.0.0 혹은 이후의 버전을 npm으로 설치할 때,  자신의 npm 버전이 2.14.2 이상이여야 설치가 가능합니다.

    추가로, Mocha를 실행시키려면 Node.js 버전 4 이상일 때 실행 가능합니다.



    시작하기


    자신이 사용할 폴더를 만들고, 그 안에 test.js 라는 파일을 생성한 후, 에디터에서 실행시켜주세요.


    에디터를 연후, 다음 코드를 넣어주세요


    var assert = require("assert");

    describe('계산기 테스트', function () {
    it('1+1은 2를 반환해라', function (done) {
    assert.equal(1+1, 2);
    done();
    });

    it('2*2 는 4를 반환해라', function (done) {
    assert.equal(2*2, 4);
    done();
    })
    })



    assert

    assert는 assertion 함수를 쉽게 사용하기 위해 node.js에서 제공하는 표준 모듈입니다.


    var assert = require("assert");



    describe

    describe는 suite의 테스트 케이스를 생성합니다.


    describe('테스트 이름', function () {

    })



    it

    it으로 테스트 코드를 작성합니다. 이때 it의 첫번째 인수는 테스트 케이스 이름을 넣어줍니다. 

    그리고 두번째 파라미터로는 Mocha가 done 객체를 전달해줄 테스트케이스의 함수를 넣어줍니다. 여기서 done객체는 테스트케이스가 종료되었을 때 호출됩니다. 이를 사용하여 비동기 처리를 할 수 있습니다.


    it('1+1은 2를 반환해라', function (done) {
    assert.equal(1+1, 2);
    done();
    });



    이제, 터미널에서 mocha를 실행시켜주세요



    $ mocha



    그러면 터미널에서 다음과 같이 테스트가 통과했다는 결과를 볼 수 있습니다!




    하지만 실제로는 더 큰 어플리케이션에서 테스트를 할 텐데요, 그래서 우리는 테스트 케이스를 더 카테고리화 해봅시다. 

    그러기 위해 우리는 describe() 안에 다른 describe()를 추가할 수 있습니다.



    var assert = require("assert");

    describe('계산기 테스트', function () {
    describe('더하기 테스트다!', function() {
    it('1+1은 2를 반환해라', function (done) {
    assert.equal(1+1, 2);
    done();
    })
    it('100+100은 200을 반환해라', function (done) {
    assert.equal(100+100, 200);
    done();
    })
    });

    describe('곱하기 테스트다!', function () {
    it('2*2는 4를 반환해라', function (done) {
    assert.equal(2*2, 4);
    done();
    })
    it('2*1111는 2222를 반환해라', function (done) {
    assert.equal(2*1111, 2222);
    done();
    })
    })

    })



    그러면 다음과 같이 결과를 확인할 수 있습니다.






    비동기 코드를 사용한 또 다른 예제


    비동기 처리를 위해서는 위에서 언급한 done 객체를 반환하면 됩니다. 정말 단순합니다!


    describe('User 테스트', function () {
    describe('저장해라', function () {
    it('에러 없이 저장해라', function (done) {
    var user = new User('Luna');
    user.save(done);
    })
    })
    })


    Hooks
    Mocha에서는 BDD스타일 인터페이스를 위해 hooks 들을 before(), after(), beforeEach(), afterEach() 와 같은 것들을 제공합니다.
    이것들은 전제조건을 설정해주고, 테스트 후에 우리의 테스트들을 정리해줍니다.

    describe('hooks 테스트', function () {
    before(function () {
    //모든 테스트가 실행되기 전에 이 블럭이 실행됩니다.
    });

    after(function () {
    //모든 테스트 실행 후에 이 블럭이 실행됩니다.
    });

    beforeEach(function () {
    //각각의 테스트 실행 전에 이 블럭이 실행됩니다.
    });

    afterEach(function () {
    //각각의 테스트 실행 후에 이 블럭이 실행됩니다.
    })

    //테스트 케이스 작성
    })



    Exclusive 테스트

    만약 특정 suite나 테스트케이스만을 테스트하고 싶다면 .only()를 함수에 추가하면 됩니다.

    describe('계산기 테스트', function () {
    describe('더하기 테스트다!', function() {
    it.only('1+1은 2를 반환해라', function () {
    assert.equal(1+1, 2);
    })

    it('100+100은 200을 반환해라', function () {
    assert.equal(100+100, 200);
    })

    it.only('1+4 는 5를 반환해라', function () {
    assert.equal(1+4, 5)
    })
    });
    })


    위의 예제를 실행시키면 두번째 케이스는 제외되고, 첫번째, 세번째 테스트만 실행되게 됩니다.





    Inclusive 테스트

    Inclusive 는 .only()와 정반대의 기능을 가지고 있습니다. .skip() 을 추가하여 사용할 수 있는 테스트 입니다. 

    Mocha 에게 이 케이스를 무시하라고 전달합니다. 이 기능을 사용하면 pending 되었다고 결과를 알려줍니다. 

    var assert = require("assert");

    describe('계산기 테스트', function () {
    describe('더하기 테스트다!', function() {
    it('1+1은 2를 반환해라', function () {
    assert.equal(1+1, 2);
    })
    it.skip('100+100은 200을 반환해라', function () {
    assert.equal(100+100, 200);
    })

    it.skip('1+4 는 5를 반환해라', function () {
    assert.equal(1+4, 5)
    })
    });
    })





    Pending 테스트

    Pending 테스트는 콜백이 없는 케이스 입니다. "누군가가 이 테스트 케이스를 작성해야 합니다" 와 같이 케이스가 작성되길 기다리는 테스트 입니다.

    var assert = require("assert");

    describe('계산기 테스트', function () {
    describe('더하기 테스트다!', function() {
    it('누군가 이 케이스를 작성해야 합니다.')
    });
    })





    참고


    https://mochajs.org/#getting-started


    댓글

Designed by Tistory.