부트캠프

테스트 코드 정리

ohs020105 2025. 1. 16. 02:12

개인적으로 발표를 준비 하면서 이건 정리 해 두면 나중에 도움이 될 것 같아서 따로 모아서 정리를 해봤다.


-파일 형성
npx ignite-cli@8 generate model ProfileEdit
=> ex)ProfileEdit.test.js 파일 형성됨

-jest 실행
Nom run test (파일이름)

-테스트 코드 구조
test(‘ 테스트 설명’, () => {
expect(‘검증 대상’).toxxx(‘기대결과’);
})

Expect 뒤에 붙는 .toxxx 부분이 test matcher이다
Test matcher는 검증 대상에 대해 다양한 측면에서 테스트를 할 수 있도록 도와준다.

-test matcher 종류
1. .toBe() : 검증 대상과 기대 결과가 동일한지를 검증한다. 객체를 검증해야하는 경우에는 사용하지 못한다.
test('two plus two is four', () => {
expect(2 + 2).toBe(4);
});
2. .toEqual(): 위와 마찬가지로 검증 대상과 기대 결과가 동일한지를 검증한다. 객체, 배열도 재귀적으로 확인하므로 검증 가능하다.
test('object assignment', () => {
const data = { one: 1 };
data['two'] = 2;
expect(data).toEqual({ one: 1, two: 2 });
});
3. .toBeTruty(), toBeFalsy(): 검증 대상이 true인지, false인지 검증한다.
test('null', () => {
const n = null;
expect(n).toBeNull();
expect(n).toBeDefined();
expect(n).not.toBeUndefined();
expect(n).not.toBeTruthy();
expect(n).toBeFalsy();
});

 

test('undefined', () => {
  const u = undefined;
  expect(u).not.toBeNull();
  expect(u).not.toBeDefined();
  expect(u).toBeUndefined();
  expect(u).not.toBeTruthy();
  expect(u).toBeFalsy();
});

test('zero', () => {
  const z = 0;
  expect(z).not.toBeNull();
  expect(z).toBeDefined();
  expect(z).not.toBeUndefined();
  expect(z).not.toBeTruthy();
  expect(z).toBeFalsy();
});

4. .toHaveLength(): 검증 대상의 배열의 길이를 검증한다. 
	const shoppingList = [
      'diapers',
      'kleenex',
      'trash bags',
      'paper towels',
      'beer',
    ];

    test('the number of shopping list', () => {
      expect(shoppingList).toHaveLength(5);
    });
  5. .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');
  });
    6. 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/);
  });
  7. .toThrow(): exception 발생 여부를 검증한다. 문자열 혹은 정규식을 인자로 넘기면 에러 메시지와 동일한지 검증한다. 
  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/);
});

 

Each 수정자는 테스트 케이스 테이블을 정의하는 몇 가지 다른 방법을 제공합니다. 일부 API에는 콜백 함수를 설명하거나 테스트하기 위해 전달되는 인수의 유형 추론과 관련된 주의 사항이 있습니다. 그들 각각을 살펴봅시다.(=>파라미터화 테스트 작성 ㅇ)

 

expect

테스트를 작성할때, 종종 값이 특정 조건을 충족하는 지 확인해야함.

-expect(value)
값을 테스트하고 싶을 때 사용된다.
expect인수는 코드가 생성하는 값이어야 하며, 매치에 대한 인수는 올바른 값이어야한다.

수정자

-.not
무언가를 테스트하는 방법을 알고 있다면, 그 반대를 테스트할 수 없습니다. 예를 들어, 이 코드는 최고의 라 크루아 맛이 코코넛이 아니라는 것을 테스트합니다:

 

-.resolves
다른 매처가 체인화될 수 있도록 해결을 사용하여 이행된 약속의 가치를 풀 수 있습니다. 약속이 거절되면 그 주장은 실패한다.
예를들어 이코드는 약속이 해결되고 결과 값이 'lemon'인지 테스트합니다.

 

-.rejects
거부된 약속의 이유를 풀면 다른 매치가 체인화될수있다. 약속이 이행되면 그 주장은 실패한다.
예를들어 이 코드는 약속이 이유 'octopus'로 거부된다는 것을 테스트한다.

 

매치

  • .toBe(value)
    .toBe를 사용하여 원시 값을 비교하거나 객체 인스턴스의 참조 ID를 확인하세요. 그것은 값을 비교하기 위해 Object.is를 호출하는데, 이는 === 엄격한 평등 연산자보다 테스트하기에 훨씬 낫다.

예를 들어, 이 코드는 캔 객체의 일부 속성을 검증할 것이다:

 

 

 

*소수점을 사용할땐 toBe를 쓰면안된다. 대신 .toBelCloseTo를 사용하면된다.

-.toHaveBeenCalled()
모의 함수가 특정 인수로 호출되었는지 확인한다. 인수는 .toEqual이 사용하는 것과 동일한 알고리즘으로 확인된다.

.toHaveBeenCalledWith를 사용하여 모의 함수가 특정 인수로 호출되었는지 확인하십시오. 인수는 .toEqual이 사용하는 것과 동일한 알고리즘으로 확인된다.

예를 들어, 음료 기능을 사용하여 사용 가능한 모든 음료에 적용하는 drinkAll(음료, 맛) 기능이 있다고 가정해 봅시다. 당신은 그 음료가 '레몬'이라고 불리는지 확인하고 싶을 수도 있지만, '문어'는 아닙니다. 왜냐하면 '문어' 맛은 정말 이상하고 왜 문어 맛이 나는 것이 있을까요? 테스트를 통해 알수있다.

 

 

-.toHaveBeenCalledWith(arg1, arg2, ...)
모의 함수가 특정 인수로 호출되었는지 확인하십시오. 인수는 .toEqual이 사용하는 것과 동일한 알고리즘으로 확인된다.

예를 들어, 등록 기능으로 음료를 등록할 수 있고, applyToAll(f)이 등록된 모든 음료에 f 기능을 적용해야 한다고 가정해 봅시다. 이것이 작동하는지 확인하기 위해, 당신은 다음과 같이 쓸 수 있습니다

-.toHaveBeenNthCalledWith(nthCall, arg1, arg2, ...)
모의 함수가 있다면, .toHaveBeenNthCalledWith를 사용하여 어떤 인수로 호출되었는지 테스트할 수 있습니다. 예를 들어, 많은 맛에 f를 적용하는 drinkEach(drink, Array) 기능이 있고, 당신이 그것을 부를 때, 그것이 작동하는 첫 번째 맛은 '레몬'이고 두 번째 맛은 '문어'라고 가정해 봅시다. 당신은 쓸 수 있습니다:

-.toHaveReturned()
모의 함수(mock function)가 있다면, .toHaveReturned를 사용하여 모의 함수가 적어도 한 번 성공적으로 반환되었는지(즉, 오류를 던지지 않음) 테스트할 수 있습니다.
예를 들어, 당신이 진실로 돌아오는 모의 음료를 가지고 있다고 가정해 봅시다. 당신은 쓸 수 있습니다:

-.toHaveReturnedTimes(number)
모의 함수가 정확한 횟수만큼 성공적으로 반환되었는지 확인 ㅇ(즉 오류를 던지지 않음)
오류를 던지는 모의 함수에 대한 호출은 함수가 반환된 횟수로 계산되지 않음

-.toHaveReturnedWith(value)
모의 함수가 특정 값을 반환했는지 확인한다.

-.toHaveLastReturnedWith(value)
모의 함수가 마지막으로 반환한 특정 값을 테스트한다.
모의 함수에대한 마지막 호출이 오류를 일으켰다면, 예상반환값으로 제공한 값에 상관없이 실패할것이다.

-toHaveNthReturnedWith(nthCall, value)
모의 함수가 n번째 호출에 대해 반환한 특정 값을 테스트한다. 모의 함수에 대한 n번째 호출이 오류를 던졌다면, 예상 반환 값으로 제공한 값에 상관없이 실패할것이다.

-toHaveLength(number)
배열이나 문자열 크기를 확인하는데 유용하다.

-.toHaveProperty(keyPath, value)
수신된 속성 값을 비교하기 위한 선택적 값 인수를 제공할 수 있습니다(toEqual matcher와 같이 깊은 평등으로도 알려진 객체 인스턴스의 모든 속성에 대해 재귀).

다음 예제에는 중첩된 속성이 있는 houseForSale 객체가 포함되어 있습니다. 우리는 객체의 다양한 속성의 존재와 가치를 확인하기 위해 toHaveProperty를 사용하고 있습니다.

 

우선 열심히 배껴온거라서 완벽하게 다 알지는 못한다. 

시간날때마다 블로그에 와서 따로 공부할 예정이다. 

앞으로 다들 힘내자..!

'부트캠프' 카테고리의 다른 글

54일차 TIL  (2) 2025.01.17
KPT 회고록  (0) 2025.01.17
52일차 TIL  (0) 2025.01.15
51일차 TIL  (0) 2025.01.14
50일차 TIL  (0) 2025.01.13