몽땅뚝딱 개발자

[Mocha] 테스팅 라이브러리 with. 모카(Mocha), chai - (2) 문법 본문

Development/환경설정

[Mocha] 테스팅 라이브러리 with. 모카(Mocha), chai - (2) 문법

레오나르도 다빈츠 2023. 5. 21. 18:17

 

 

 

 


 

 

 

📄 예제 코드

expect를 사용해본다.

import {expect} from "chai";
import {substringsBetween} from "../script/chapter2";

describe('chapter2', () => {
  it('T1: null', () => {
    expect(substringsBetween(null, 'a', 'b'))
    .to.equal(null)
  })

 

assert 단언문을 사용해본다.

import {indexOf} from "../script/chapter5";

const assert = require('assert')

describe('chapter5. 속성 기반 테스트 - 예제 3', () => {
  it('T1: array가 널인 경우', () => {
    assert.deepEqual(indexOf(null, 3, 1), -1)
  });

  it('T2: array의 요소가 하나이고, array에 valueToFind가 있는 경우', () => {
    assert.deepEqual(indexOf([3], 3, 0), 0)
  });

  it('T3: array의 요소가 하나이고, array에 valueToFind가 없는 경우', () => {
    assert.deepEqual(indexOf([3], 2, 0), -1)
  });

  it('T4: startIndex가 음수이고, array에 값이 있는 경우', () => {
    assert.deepEqual(indexOf([1, 3, 5, 3, 5], 3, -1), 1)
  });
})

 

 

💡 Tip
$ npm i should
const should = require('should');
const should = require('chai').should(); // chai로 이렇게 쓸 수도 있다.

should.equal(str, 'foo')는 assert.equal(str, 'foo')와 똑같이 동작한다. 쓰는 방식에 차이가 있다.

 

 

 


 

 

 

 

◽️ chai에서 제공하는 chain

문장으로 매끄럽게 연결하며 코드의 가독성을 높일 때 사용한다.

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

 

 


 

 

 

◽️ equal

얕은 비교를 할 때 사용한다. type까지 비교하므로 연산(===)과 같다.

not을 붙일 수도 있다.

import {passed} from "../script/chapter5";

const assert = require('assert')

describe('chapter5. 속성 기반 테스트 - 예제 1', () => {
  it('fail 속성에 관한 테스트', () => {
    assert.equal(passed(1.0), false)
  });

  it('pass 속성에 관한 테스트', () => {
    assert.not.equal(passed(6.5), true)
  });

  it('invalid 속성에 관한 테스트', () => {
    assert.equal(passed(0.1), undefined)
  });
})

 

 

◽️ deepEqual

깊은 비교를 할 때 사용한다.

import {unique} from "../script/chapter5";

const assert = require('assert')

describe('chapter5. 속성 기반 테스트 - 예제 2', () => {
  it('테스트', () => {
    assert.deepEqual(unique([1, 3, 6, 3]), [1, 3, 6])
  });
})

 

 

◽️ 값의 비교

  • above: 초과
  • least: 이상
  • below: 미만
  • most: 이하
  • within: 범위
import {expect} from "chai";

describe('test', () => {
  const arr = [1, 2, 3, 4];

  it("above", () => {
    expect(Math.max(...arr)).to.above(3);
  });


  it("least", () => {
    expect(Math.max(...arr)).to.least(4);
  });


  it("below", () => {
    expect(Math.min(...arr)).to.below(2);
  });


  it("most", () => {
    expect(Math.min(...arr)).to.most(1);
  });


  it("within", () => {
    expect(arr.length).to.within(3, 5);
  });
});

 

 

 

◽️ ownProperty

검사할 객체가 해당 속성을 갖고있는지 검사한다.

describe('test', () => {
  it('ownProperty', function () {
    ({ foo: 'bar' }).should.have.ownProperty('foo')
  });
});

 

 

◽️ NaN

const returnNaN = (value: any) => {
  return value - 3
}

describe('test', () => {
  it('throw', function () {
    expect(returnNaN('a')).to.NaN;
  });
});

 

 

◽️ a

객체의 typeOf를 검사한다.

describe('test', () => {
  it('a', function () {
    'test'.should.be.a('string')
  });
});

 

 

◽️ throw

const throwError = () => {
  throw new Error('fail');
}

describe('test', () => {
  it('throw', function () {
    expect(throwError).to.throw()
  });

  it('throw: 에러타입+메세지 검사', function () {
    expect(throwError).to.throw('fail')
  });

  it('throw: 에러타입 검사', function () {
    expect(throwError).to.throw(Error, 'fail')
    // expect(() => throwError()).to.throw(Error, 'fail') // 또는
  });
});

 

 

 


 

 

출처

https://heropy.blog/2018/03/16/mocha/

https://blog.outsider.ne.kr/774

 

Comments