Jest 단위 테스트를 반복하는 방법

10202 단어 javascriptjest
이 문서는 https://robertmarshall.dev/blog/how-to-loop-in-jest-unit-tests/에 처음 게시되었으며 최신 정보입니다.


때로는 Jest 단위 테스트를 작성할 때 다른 사례를 빠르게 테스트하기 위해 항목을 반복할 수 있기를 원할 것입니다. 항목 배열을 반복하거나 Jest 테스트에서 숫자 사이를 세는 것입니다. 이렇게 하면 Jest 테스트 스위트가 대폭 간소화됩니다.

이를 수행하는 방법에는 여러 가지가 있습니다. 이 게시물은 내가 과거에 Jest 테스트를 반복했던 방법을 간략하게 설명하는 것을 목표로 합니다.

Jest.Each로 테스트 반복



매우 기본적인 반복 Jest 테스트의 경우 jest.each 를 사용합니다. 다른 데이터로 동일한 테스트를 계속 복제할 수 있습니다. 테스트를 한 번 작성하고 데이터가 작동하도록 할 수 있습니다.

기본 배열 및 printf 사용



이에 대한 예는 다음과 같습니다.

test.each([
  [1, 1, 2],
  [1, 2, 3],
  [2, 1, 3],
])('.add(%i, %i)', (a, b, expected) => {
  expect(a + b).toBe(expected);
});


위의 코드는 배열 내의 데이터 집합, 텍스트에 매개 변수를 삽입하기 위해 printf를 사용하는 테스트 이름 및 테스트 자체에 전달될 인수를 가져옵니다.
jest.each에 대한 자세한 내용은 Jest documentation을 참조하십시오.

객체 배열 사용



printf를 사용하는 대신 객체 배열을 전달하고 문자열 리터럴을 사용하여 참조할 수 있습니다. 이렇게:

test.each([
  {a: 1, b: 1, expected: 2},
  {a: 1, b: 2, expected: 3},
  {a: 2, b: 1, expected: 3},
])('.add($a, $b)', ({a, b, expected}) => {
  expect(a + b).toBe(expected);
});


나는 개인적으로 이것을 선호합니다. 각 항목이 무엇인지 더 명확하고 더 복잡한 테스트 데이터 세트를 구축할 수 있습니다.

Jest.Each를 테이블과 함께 사용하기


jest.each API를 사용하면 보다 '시각적'인 방식으로 데이터를 전달할 수도 있습니다. 하나의 큰 문자열 리터럴을 사용하여 테이블의 데이터를 형성할 수 있습니다.

이것은 다음과 같습니다.

test.each`
  a | b | expected
  ${1} | ${1} | ${2}
  ${1} | ${2} | ${3}
  ${2} | ${1} | ${3}
`('returns $expected when $a is added $b', ({a, b, expected}) => {
  expect(a + b).toBe(expected);
});


첫 번째 행은 테이블 제목을 설정하고 나머지 행은 템플릿 리터럴을 사용하여 값을 추가합니다. 그런 다음 템플릿 리터럴을 사용하여 테스트 제목 자체에서 데이터를 문자열에 주입합니다.

내 최고의 선택은 아니지만 일부 사람들은 이러한 테스트 처리 방식을 좋아합니다.

Jest 테스트에서 For 루프 사용



for 루프는 Jest 테스트를 동적으로 반복하고 싶을 때 사용합니다. jest에서 루프를 작성하는 이 방법에서는 printf 변수 주입이 필요하지 않습니다. 나를 구식(또는 잘못된)이라고 부르지만 테스트를 완전히 제어할 수 있는 유연성과 테스트 생성 방법도 좋아합니다.

예를 들어 for 루프 방식을 사용하면 내부 단위 테스트뿐만 아니라 테스트 블록을 루프describe할 수 있습니다. 그러나 이러한 자유에는 자신을 제한할 필요가 있습니다. 그렇지 않으면 테스트가 과도하게 설계되어 너무 혼란스러워질 수 있습니다.

간단한 테스트가 더 좋습니다.

const testData = [
    { a: 1, b: 1, expected: 2 },
    { a: 1, b: 2, expected: 3 },
    { a: 2, b: 1, expected: 3 }
];

for (let i = 0; i < testData.length; i += 1) { it(`.add(${testData[i].a}, ${testData[i].b})`, () => {
        expect(testData[i].a + testData[i].b).toBe(testData[i].expected);
    });
}


위는 동적으로 생성된 Jest 테스트를 생성하기 위해 for 루프를 사용하는 방법을 보여줍니다. 그러나 드물게 사용해야 하며 jest.each는 대부분의 상황을 처리할 수 있습니다. for 루프는 복잡한 상황에 더 적합합니다.

더 많은 Jest 힌트와 팁을 보려면 Jest Testing Category을 살펴보십시오!

이 정보가 도움이 되었길 바라며 질문이 있는 경우 다음 주소로 저에게 연락할 수 있습니다.

좋은 웹페이지 즐겨찾기