Dog foot print

[JEST] Matcher 사용하기 본문

TDD/JEST

[JEST] Matcher 사용하기

개 발자국 2021. 5. 16. 16:10

Note : 제스트는 matcher를 사용하여, 사용자가 다양한 방식으로 값을 테스트 하게 도와줍니다. 이 문서는 주로 사용되는 matcher에 대해서 소개 하며, 모든 Mathcer에 대한 list는 다음의 링크를 참조하세요.

일반적인 Matcher들

다음 예제는 아주 간단한 방법으로 값이 예상하는 값과 일치하는지 확인 하는 방법입니다.

test('two plus two is four',()=>{
    expect(2 + 2).toBe(4);
})

이 코드에서, expect(2+2) 함수 호출은 ”expectation” 객체를 반환합니다. 일반적으로 이러한 expectation 객체에서 call matcher를 제외하고는 많은 작업을 수행하지 않습니다. 이 코드에서는.toBe(4) 가 Matcher 입니다. 제스트가 실행될 때, 제스트는 모든 실패하는 매치를 추적합니다. 그러므로 매치가 실패하는 경우 , JEST는 에러를 발생 시킬 것입니다.

toBe 는 Object.is 메서드를 사용합니다. 그러므로, 특정 Object를 toBe 메서드로 확인 하는 경우 모두 Fail이 발생 할 것 입니다. Object의 멤버를 확인 하고 싶다면, toEqual 메서드를 사용하세요

test('object assignment',()=>{
    const data = {one : 1};
    data['two'] = 2;
    expext(data).toEqual({one : 1, two : 2}) 
})

toEqual 메서드는 모든 객체와 배열의 멤버를 확인합니다.

JEST는 opposite matcher(반대 매쳐) 를 제공합니다. 이 매쳐를 통해, 테스트 하고자 하는 대상이 특정 기대값이 아니라는 것을 증명할 수 있습니다.

test('adding positive number is not zero',()=>{
    for(let a = 1; a < 10; a++){
        for(let b=1; b < 10; b++){
            expect(a+b).not.toBe(0);
        }
    }
})

Truthiness 진실성

테스트를 진행하며, 개발자는 undefined, null, false 값들을 구별해야 할 때가 존재합니다. 그러나, 개발자는 이들을 따로 구별하고 싶지 않을 수 있습니다. (자바스크립트의 느슨함 덕분에 undefined,null,false 는 모두 동등하다. ) 제스트는 당신이 원하는 것을 말하고 싶은 바를 아는 유용한 매쳐들이 존재합니다.

* toBeNull : 오직 null과 매치됩니다. 
* toBeUndefined : 오직 undefined 만 매치됩니다.
* toBeDefined :  toBeUndefined와 반대인 경우로 undefined가 아닌 모든 것에 매치됩니다. 
* toBeTruthy : true와 동등한 값들과 매치 됩니다. 
* toBeFalsy : 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();
    espect(z).toBeFalsy();
})

Note : 개발자는 올바른 매쳐를 이용하여, 개발자가 원하는 결과와 코드가 제대로 동작하는지 확인 해야합니다.

Numbers

숫자를 비교하는 가장 일반적인 방법은 equivalents 매쳐를 이용하는 것입니다. (===)

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);

    //to Be와 toEqual 메서드는 기대값과 일치하는지 결과를 반환합니다.
    expect(value).toBe(4);
    expext(value).toEqual(4);
})

Note : 만약 부동 소수점 근사값과 일치하는지 확인하기 위해서는 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 함수를 사용하면 됩니다.

test('ther is no I in team',()=>{
    expect('team').not.toMatch(/I/);
})
test('but there is a "stop" in Christoph', () => {
  expect('Christoph').toMatch(/stop/);
});

Array 와 iterables

Note : Iterable은 열거형이라는 의미로, 쉽게 말해 next() 메서드를 통해서, 객체 내부에 있는 멤버를 확인 할 수 있는 객체를 의미합니다.

개발자는 array 혹은 iterable 객체의 멤버를 확인하고 싶은 경우 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');
})

Exceptions

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);

  // 함수가 에러를 뱉는 메시지를 예상하거나, 정규표현식을 이용해서 확인 가능합니다.
  expect(() => compileAndroidCode()).toThrow(‘you are using the wrong JDK’);
  expect(() => compileAndroidCode()).toThrow(/JDK/);
});

Note : 함수가 에러를 발생시킨다면, 함수를 다른 함수로 감싸야합니다. expect의 인자로 전달한 함수가 에러를 발생시킨다면, JEST는 이 함수의 반환 값을 Error로 받아들이기 떄문입니다.

#JEST #ERROR #toThrow

반응형

'TDD > JEST' 카테고리의 다른 글

[JEST]snapshot test  (0) 2021.05.24
[JEST] Mock functions  (0) 2021.05.19
[JEST] Setup and  Teardown  (0) 2021.05.18
[JEST] 비동기 코드 테스트  (0) 2021.05.16
[JEST] 시작하기 설치 및 설정  (1) 2021.05.15
Comments