초보자를 위한 Jest 튜토리얼: Jest Matchers [2/4]

소개



Jest는 "매처"를 사용하여 다양한 방식으로 값을 테스트할 수 있습니다.
이 부분에 있는 대부분의 정보는 Jest docs에서 가져온 것입니다.

공통 매처



값을 테스트하는 가장 간단한 방법은 정확히 일치하는 것입니다.

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


이 코드에서 expect(2 + 2)는 "기대"객체를 반환합니다. 일반적으로 일치자를 호출하는 것을 제외하고는 이러한 예상 객체로 많은 작업을 수행하지 않습니다. 이 코드에서 .toBe(4)는 매처입니다. Jest가 실행되면 실패한 매처를 모두 추적하여 멋진 오류 메시지를 출력할 수 있습니다.
toBe에서는 Object를 사용하여 정확한 동일성을 테스트합니다. 객체의 값을 확인하려면 대신 toEqual를 사용하십시오.

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

toEqual 객체 또는 배열의 모든 필드를 재귀적으로 확인합니다.

매처의 반대를 테스트할 수도 있습니다.

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


1. 진실성



테스트에서 때때로 undefined, null 및 false를 구분해야 합니다. Jest에는 원하는 것을 명시할 수 있는 도우미가 포함되어 있습니다.
  • toBeNull null만 일치함
  • toBeUndefined 정의되지 않은 항목만 일치
  • toBeDefinedtoBeUndefined의 반대입니다.
  • toBeTruthy if 문이 true로 취급하는 모든 것과 일치합니다
  • .
  • toBeFalsy if 문이 거짓으로 취급하는 모든 것과 일치합니다.
    예를 들어:

  • 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();
    });
    


    참고: 코드에서 수행하려는 작업과 가장 정확하게 일치하는 매처를 사용하십시오.

    2. 숫자



    jest는 숫자를 비교하기 위해 다양한 매처를 제공합니다.
    예시:

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


    테스트가 작은 반올림 오류to understand this error click here에 의존하는 것을 원하지 않기 때문에 부동 소수점 동등성을 위해 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.
    });
    


    2. 문자열



    jest는 toMatch를 사용하여 정규식에 대해 문자열을 검사하는 기능을 제공합니다.

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


    3. 배열과 이터러블


    toContain를 사용하여 배열이나 이터러블에 특정 항목이 포함되어 있는지 확인할 수 있습니다.

    const shoppingList = [
      'diapers',
      'kleenex',
      'trash bags',
      'paper towels',
      'milk',
    ];
    
    test('the shopping list has milk on it', () => {
      expect(shoppingList).toContain('milk');
      expect(new Set(shoppingList)).toContain('milk');
    });
    


    4. 예외



    특정 함수가 호출될 때 오류가 발생하는지 여부를 테스트하려는 경우 jest는 일치자를 제공합니다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/);
    });
    


    참고: 예외를 발생시키는 함수는 래핑 함수 내에서 호출해야 합니다. 그렇지 않으면 toThrow 어설션이 실패합니다.


    새로운 개념을 탐구하고 다른 사람들과 공유하는 것이 저의 열정이며 사람들을 돕고 영감을 주는 것이 저에게 기쁨입니다. 질문이 있으시면 언제든지 문의해 주세요!

    , 및 GitHub에 연결

    모든 사람이 개선할 여지가 있다는 것을 알고 있으므로 귀하의 제안에 감사드립니다. 그리고 새로운 것을 알고 싶습니다(❤️).

    좋은 웹페이지 즐겨찾기