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