🖥FrontEnd

jest 용도별 매처 알아보기

hellohailie 2024. 9. 21. 00:45
반응형

 

 

 

1. 진리값 검증

toBeTruthy = 참인 값과 일치하는 매처

toBeFalsy = 거짓인 값과 일치하는 매처

=> 각 매처 앞에 not 추가하면 진리값을 반전시킬 수 있다. 

 

TIP) null, undefined도 toBeFalsy와 일치하지만, 각각 검증하고 싶으면 toBeNull, toBeUndefined 사용한다. 

 

describe("진릿값 검증", () => {
  test("참인 진릿값 검증", () => {
    expect(1).toBeTruthy();
    expect("1").toBeTruthy();
    expect(true).toBeTruthy();
    expect(0).not.toBeTruthy();
    expect("").not.toBeTruthy();
    expect(false).not.toBeTruthy();
  });
  test("거짓인 진릿값 검증", () => {
    expect(0).toBeFalsy();
    expect("").toBeFalsy();
    expect(false).toBeFalsy();
    expect(1).not.toBeFalsy();
    expect("1").not.toBeFalsy();
    expect(true).not.toBeFalsy();
  });
  test("null과 undefined 검증", () => {
    expect(null).toBeFalsy();
    expect(undefined).toBeFalsy();
    expect(null).toBeNull();
    expect(undefined).toBeUndefined();
    expect(undefined).not.toBeDefined();
  });
});

 

 

2. 수치 검증

 

toBe, toEqual, toBeGreaterThan, toBeGreaterThanOrEqual, toBeLessThan, toBeLessThanOrEqual ...

 

자바스크립트는 소수 계산에 오차가 있어서 toBeCloseTo 매처를 사용한다. 

 

 

3. 문자열 검증

 

등가 비교 또는 문자열 일부가 일치하는지 검증 = toContain

정규표현식을 검증 = toMatch

문장열 길이 = toHaveLength

 

객체에 포함된 문자열 검증 = stringContaining, stringMatching

test("stringContaining", () => {
    expect(obj).toEqual({
      status: 200,
      message: expect.stringContaining("World"),
    });
  });
  test("stringMatching", () => {
    expect(obj).toEqual({
      status: 200,
      message: expect.stringMatching(/World/),
    });
  });

 

 

4. 배열 검증

 

배열에 원시형(primitive type)인 특정값이 포함됐는지 확인하고 싶다면 toContain

배열 길이 검증 = toHaveLength

 

배열에 특정 객체 포함됐는지 = toContainEqual

 

인수로 넘겨준 배열의 요소들이 전부 포함돼있어야 성공 = arrayContaining

const article1 = { author: "taro", title: "Testing Next.js" };
    const article2 = { author: "jiro", title: "Storybook play function" };
    const article3 = { author: "hanako", title: "Visual Regression Testing" };
    const articles = [article1, article2, article3];
    test("toContainEqual", () => {
      expect(articles).toContainEqual(article1);
    });
    test("arrayContaining", () => {
      expect(articles).toEqual(expect.arrayContaining([article1, article3]));
    });

 

 

5. 객체 검증

 

toMatchObject

부분적으로 프로퍼티가 일치하면 테스트를 성공시키고, 일치하지 않는 프로퍼티가 있으면 테스트 실패.

 

toHaveProperty

객체에 특정 프로퍼티가 있는지 검증

 

objectContaining

 객체 내 또다른 객체 검증

const author = { name: "taroyamada", age: 38 };
  const article = {
    title: "Testing with Jest",
    author,
  };
  test("toMatchObject", () => {
    expect(author).toMatchObject({ name: "taroyamada", age: 38 });
    expect(author).toMatchObject({ name: "taroyamada" });
    expect(author).not.toMatchObject({ gender: "man" });
  });
  test("objectContaining", () => {
    expect(article).toEqual({
      title: "Testing with Jest",
      author: expect.objectContaining({ name: "taroyamada" }),
    });
    expect(article).toEqual({
      title: "Testing with Jest",
      author: expect.not.objectContaining({ gender: "man" }),
    });
  });

 

반응형