2020-3-12 Jest(1)
Jest
Matcher
- jest의 matchers를 이용해서 test결과값을 비교할 수 있다.
Common matcher
test('two plus two is four', () => {
expect(2+2).toBe(4);
})
- expect(2+2)는 expectation object를 리턴해준다. expectation object에서 matcher를 호출한다.
- toBe는 toEqual로 대신 쓸 수 있다.
test('object assignment', () => {
const data = {one: 1};
data['two'] = 2;
expect(data).toEqual({one: 1, two: 2});
});
test('adding positive numbers is not zero', () => {
for (let a = 1; a < 10; a++) {
for (let b = 1; b < 10; b++) {
expect(a + b).not.toBe(0);
}
}
});
- toEqual의 경우 object, array의 모든 필드를 순회하면서 값을 체크한다.
- not을 이용해서 반대되는 값도 검증할 수 있다.
Truthiness
- toBeNull, toBeUndefined, toBeDefined, toBeTruthy, toBeFalsy 메서드를 통해 null, undefined, defined, true, false 역시 비교할 수 있다.
test('null', () => {
const n = null;
expect(n).toBeNull();
expect(n).toBeDefined();
expect(n).not.toBeUndefined();
expect(n).not.toBeTruthy();
expect(n).toBeFalsy();
});
test('zero', () => {
const z = 0;
expect(z).not.toBeNull();
expect(z).toBeDefined();
expect(z).not.toBeUndefined();
expect(z).not.toBeTruthy();
expect(z).toBeFalsy();
});
Numbers
- toBeGreaterThan(value), toBeGreeterThanOrEqual, toBeLessThan, toBeLessThanOrEqual
- float의 경우 toBeCloseTo를 사용해서 toEqual을 대신한다.
test('adding floating point numbers', () => {
const value = 0.1 + 0.2;
//expect(value).toBe(0.3); This won't work because of rounding error
expect(value).toBeCloseTo(0.3); // This works.
});
String
- toMatch를 이용해서 regex에 매칭이 되는지 체크
test('but there is a "stop" in Christoph', () => {
expect('Christoph').toMatch(/stop/);
});
Arrays and iterable
- array에서 toContain을 이용해서 해당 값이 있는지 확인
const shoppingList = [
'diapers',
'kleenex',
'trash bags',
'paper towels',
'beer',
];
test('the shopping list has beer on it', () => {
expect(shoppingList).toContain('beer');
expect(new Set(shoppingList)).toContain('beer');
});
Exception
- 예외처리에 대해서는 toThrow()를 통해 검증가능.
function compileAndroidCode() {
throw new Error('you are using the wrong JDK');
}
test('compiling android goes as expected', () => {
expect(compileAndroidCode).toThrow();
expect(compileAndroidCode).toThrow(Error);
// You can also use the exact error message or a regexp
expect(compileAndroidCode).toThrow('you are using the wrong JDK');
expect(compileAndroidCode).toThrow(/JDK/);
});
느낀점
- 처음 JS를 이용해서 테스트코드를 작성할때는 Mocha+Chai조합을 이용해서 테스트를 진행했었다. 이유는 레퍼런스가 가장 많았기때문에… 요구사항에 Jest를 쓰라는 부분이 있어서 Jest를 차근차근 보는데, 원리는 크게 비슷하다는 생각이 많이 들었다. assertion을 한다던지. describe로 그룹을 나눈다던지. 전체적인 느낌은 거의 유사했다. 다만 mocking을 하는부분이 좀 다른거 같다. 이 부분은 직접 적용하면서 느낀점을 적어봐야겠다.
Written on March 12, 2020