본문 바로가기
Javasctript

Mocha를 이용해 Javascript 테스트 해보기

by AsCE_hyunseung 2019. 1. 24.

Mocha를 이용해 Javascript 테스트 해보기

IntelliJ Ultimate edition에서만 지원한다고 한다.

IntelliJ terminal에서 npm install -g mocha 입력

  • npm install mocha //local installation in project
  • npm install -g mocha //global installation

test.js 생성

1
2
3
4
5
6
7
var assert = require('assert');
describe('#Hello World!'function () {
    it('입력 값은 Hello World!'function () {
        var input = 'Hello World!'// 입력 값이라고 가정
        assert.equal('Hello World!', input);
    });
});
cs

terminal에서 mocha test.js

Mocha에서 사용 가능한 Assertion 은

  1. Should.js
  2. expect.js
  3. Chai
  4. better-assert
  5. unexpected

이렇게 총 5종류인데 거의 Chai와 같이 사용된다고 하니 Chai를 사용하려고 한다.
Chai는 should, Expect, Assert와 같은 인터페이스를 지원한다고 한다. 아직 감이 잘 안와서 예제를 통해 이해해보려고 한다.

terminal에서 npm i chai --save-dev

Chai expect test

testChai.js 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var chai = require('chai');
var expect = chai.expect;
var assert = chai.assert;
var should = chai.should();
 
describe('#Expect Test'function () {
    it('expect - Array'function () {
        var arr = [12534];
        expect(arr).to.have.lengthOf(5);                        //array length
        expect(arr).to.be.not.empty;                            //empty
        expect(arr).to.have.ordered.members([12534]);   //arr === members
    });
});
 
it('expect - String'function () {
    var str = 'Awesome!!';
 
    expect(str).to.be.a('String');                  //str type
    expect(str).to.equal('Awesome!!');              //str === 'Awesome!!'
    expect(str).to.have.lengthOf(7'Why fail?');   //Error
});
it('expect - Object'function () {
    var obj = {
        assertion: ['assert''expect''should'],
        framework: 'mocha'
    };
    expect(obj).to.have.property('assertion').with.lengthOf(3);     //assertion value length
    expect(obj).to.have.all.keys('framework''assertion');         //obj key === keys
});
cs

terminal에서 mocha testchai.js

expect는 임의의 실패한 assertion 앞에 메시지를 포함할 수 있다. 신기하다.

expect should는 체이닝 방식을 사용한다고 한다.

  • to
  • be
  • been
  • that
  • which
  • and
  • has
  • have
  • with
  • at
  • of
  • same
  • but
  • does

Chai should test

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var chai = require('chai');
var expect = chai.expect;
var assert = chai.assert;
var should = chai.should();
 
describe('#Should Test'function () {
    it('should - Array'function () {
        var arr = [12534];
        arr.should.have.lengthOf(5);                        //array length
        arr.should.be.not.empty;                            //empty
        arr.should.have.ordered.members([12534]);   //arr === members
    });
    it('should - String'function () {
        var str = 'Awesome!!';
        str.should.be.a('String');                  //str type
        str.should.equal('Awesome!!');              //str === 'Awesome!!'
        str.should.have.lengthOf(7'Why fail?');   //Error
    });
    it('should - Object'function () {
        var obj = {
            assertion: ['assert''expect''should'],
            framework: 'mocha'
        };
        obj.should.have.property('assertion').with.lengthOf(3);     //assertion value length
        obj.should.have.all.keys('framework''assertion');         //obj key === keys
    });
});
cs

이렇게 코드를 짜고 test를 돌려보면 결과는 expect와 같은데 expectshould의 다른점은

1
2
var expect = chai.expect;
var should = chai.should();
cs
  • expect - 함수에 대한 참조
  • should - 함수 실행

Chai assert test

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var chai = require('chai');
var expect = chai.expect;
var assert = chai.assert;
var should = chai.should();
 
describe('#Assert Test'function () {
    it('assert - Array'function () {
        var str = 'Awesome!!';
        var obj = {
            assertion: ['assert''expect''should'],
            framework: 'mocha'
        };
        assert.equal(str, 'Awesome!!');         //str === 'Awesome!!'
        assert.typeOf(str, 'String');           //str type
        assert.lengthOf(obj.assertion, 3);      //assertion value length
    });
});
cs

실행 결과


나는 아직 체이닝 방식에 익숙하지는 않아서 Assert를 자주 이용할 것 같다.

https://kdydesign.github.io
아직 자바스크립트, test에 대해서 지식이 얕아서 참고를 정말 많이했다 감사합니다 :)

코딩 테스트를 본 이후로 자바스크립트 공부를 메인으로 하기로 마음먹었다. 첫 스타트이다.


'Javasctript' 카테고리의 다른 글

ES6 모듈 시스템  (0) 2021.02.28
npm 관련 error solve  (0) 2019.10.23
[level 1] Collatz 추측  (4) 2019.03.16
[codility] CyclicRotation  (0) 2019.03.14
[codility] BinaryGap  (0) 2019.03.13