using matchers : https://jestjs.io/docs/using-matchers
matcher란 이거 맞아? 라고 물어보는 메서드입니다. 기대한 값이 실제 반환된 값과 일치하는 지를 확인하는 작업인 것이죠.
모든 matcher를 확인해보고 싶다면 expect에 대한 api 상세서 https://jestjs.io/docs/expect 를 참고합시다.
* it은 test의 별칭임. 따라서 같음
it('should 3', () => expect(3).toBe(3));
test('should 3', () => expect(3).toBe(3));
// 위 두 코드는 같은 코드임
일치 판단
일반적인 원시값 체크에는 toBe가 사용됩니다.
test('1+2=3. quick math!', () => {
expect(1 + 2).toBe(3);
});
test('object test', () => {
const me = { name: 'darren', age: 100 };
expect(me.name).toBe('darren');
});
// not을 통해 무엇이 아님을 테스트할 수 있음.
test('not 4', () => {
expect(1 + 2).not.toBe(4);
});
레퍼런스 타입의 값에 대한 일치를 체킹하려면 toEqual을 사용합니다. object 형 값들은 애초에 할당되는 메모리 주소가 다르자나여~
new Object() === new Object() // false. 할당되는 메모리 주소가 다름.
const makingGame = money => {
if (money > 1000) return { name: 'goodGame', money };
else return { name: 'xhitGame', money };
};
test('should return goodGame', () => {
expect(makingGame(1200)).toEqual({ name: 'goodGame', money: 1200 });
});
toEqual대신에 toStrictEqual을 사용하여 좀 더 엄격하게 검수하는 방법도 있습니다.
https://jestjs.io/docs/expect#tostrictequalvalue
class Factory {
constructor(name) {
this.name = name;
}
}
test('instance', () => {
const fanOne = new Factory('fan');
expect(fanOne).toEqual({ name: 'fan' }); // pass
expect(fanOne).toStrictEqual({ name: 'fan' }); // fail
});
class
특정 클래스의 인스턴스인지 체크합니다. toBeInstanceOf
class Factory {
constructor(name) {
this.name = name;
}
}
test('instance', () => {
const fanOne = new Factory('fan');
expect(fanOne).toBeInstanceOf(Factory);
});
참/거짓
참거짓 판단에서 falsy, truthy한 값들을 처리하기 위해 아래와 같은 Matcher들을 사용합니다.
undefined, null, and false을 다르게 처리하고 싶다면 toBeNull, toBeUndefined, toBeDefined를 사용하시고
단순히 falsy, truthy를 체킹하고 싶다면 toBeTruthy, toBeFalsy를 사용합니다.
- toBeNull matches only null
- toBeUndefined matches only undefined
- toBeDefined is the opposite of toBeUndefined
- toBeTruthy matches anything that an if statement treats as true
- toBeFalsy matches anything that an if statement treats as false
test('my gf is null', () => {
const myGirlfriend = null;
expect(myGirlfriend).toBeNull(); // pass
expect(myGirlfriend).toBeUndefined(); // fail
expect(myGirlfriend).toBeDefined(); // fail
expect(myGirlfriend).toBeTruthy(); // fail
expect(myGirlfriend).toBeFalsy(); // pass
});
숫자형 값 비교 판단
>, >=, <, <= 를 확인합니다. 너무 직관적이라 설명은 생략.
test('two plus two', () => {
const value = 2 + 2;
expect(value).toBeGreaterThan(3);
expect(value).toBeGreaterThanOrEqual(3.5);
expect(value).toBeLessThan(5);
expect(value).toBeLessThanOrEqual(4.5);
// toBe and toEqual are equivalent for numbers
expect(value).toBe(4);
expect(value).toEqual(4);
});
다만, 부동 소수점은 컴퓨터의 근본적인 특성상 소수점에서 정확도 차이가 날 수 밖에 없습니다.
toBeCloseTo를 사용하도록합시다.
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.
});
문자열 일치, 포함 판단
문자열은 iterable이긴 하지만 원시값이잖아요? toMatch(regex | string) 꼴로 사용하면 됩니다.
// 정규식 사용
test('there is no I in team', () => {
expect('team').not.toMatch(/i/i); // case insenstive flags
});
// string도 됨
test('me and you', () => {
expect('me and you').toMatch('you');
});
배열과 iterables
길이와 포함 여부를 판단할 수 있습니다.
const shoppingList = [
'diapers',
'kleenex',
'trash bags',
'paper towels',
'milk',
];
test('the shopping list test', () => {
expect(shoppingList).toHaveLength(5);
expect(shoppingList).toContain('milk');
expect(new Set(shoppingList)).toContain('milk');
});
// string은 iterable이니까 ㅎㅎ
test('string test', () => {
const str = 'hello';
expect(str).toHaveLength(5);
expect(str).toContain('o');
});
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/);
});
'Node, Nest, Deno > 🧪 test (jest, mocha...)' 카테고리의 다른 글
jest (5) : Mock, 외부 패키지 Mock, Spy (0) | 2021.06.18 |
---|---|
jest (4) : Setup and test block scope (0) | 2021.06.18 |
jest (3) : 비동기 코드 테스트하기 (0) | 2021.06.18 |
jest (1) : installation, configuring (0) | 2021.06.18 |
TDD (Test Driven Development) : mocha, should, superTest (1) | 2020.04.27 |