expect 기능 정리

5o_hyun·2024년 11월 4일
0

expect 테스트

expect.뒤에 붙는 기능들을 정리할 생각이다.
기대한 값이랑 실제 반환된 값이 일치하는지 확인하는 작업이다.

toEqual()

객체의 내용이 같은지

expect({username:"sohyun"}).toEqual({username:"sohyun"}); // true

toStrictEqual()

객체의 내용이 같은지, 단 undefined를 고려한다.

test("toStrictEqual의 undefined 구분 여부", () => {
  const obj = { a: undefined, b: 1 };

  function test(testObj) {
    return testObj;
  }

  expect(test(obj)).toStrictEqual({ b: 1 }); // fail
});

toBe()

값 비교

expect(1+2).toBe(3); // true
expect({username:"sohyun"}).toBe({username:"sohyun"}); 
// false 객체의 내용이 같더라도 서로 다른 메모리에 있는 객체이기 때문 

test('toBe는 obj가 같은 객체를 가리키고 있는지 확인한다', () => {
    const obj = {};
    expect(obj).toBe(obj); // true
});

toMatch()

toBe는 문자열이 정확한지만체크, toMatch는 정규식 확인에 쓰임

test("string", () => {
  expect(user.email).toBe("user@test.com"); // 단순 문자열 비교
  expect(user.email).toMatch(/.*test.com$/); // 정규식 비교
});

toBeTruthy()

toBeFalsy()

toBeTruthy : true로 간주되면 테스트통과
toBeFalsy : false로 간주되면 테스트통과

test('0은 string이다.',() => {
	expect(0).toBeTruthy(); // 숫자0은 string이 아니다 : false => false
    expect(0).toBeFalsy(); // 숫자0은 string이 아니다 : false => true
});

toBeCalled() / toHaveBeenCalled()

두개다 함수가 호출되었는지 여부

function Shaker(callback,what){
  if(what === 'person'){
  	return;
  }
  callback(what);
}

describe('Shaker', () => {

  test('shaker만들기', () => {
    const callback = jest.fn();
    Shaker(callback, 'apple');
    
    expect(callback).toHaveBeenCalled(); // 함수 호출 O
  });

  test('shaker만들었지만, 사람이라안되는경우', () => {
    const callback = jest.fn();
    Shaker(callback, 'person');
    
    expect(callback).not.toHaveBeenCalled(); // 함수 호출 X
  });
});

toHaveLength()

배열의 길이가 맞는지

const array = ['a','b'];

expect(array).toHaveLength(2); // 배열의 길이는 2  true

toContain()

배열에 해당요소를 포함하는지

const array = ['a','b'];

expect(array).toContain('a'); // true

toThrow()

예외 발생 여부 ** 아직잘모르겠다.

toHaveProperty()

객체에 해당 key : value 값이 있는지 검사

test("find user property", async () => {
   const user = {
      id : 1,
      name : "Leanne Graham"
   }
   
   expect(user).toHaveProperty("id", 1); // { id : 1 } 이 user 객체에 있느냐? -> true
   expect(user).toHaveProperty("name", "Leanne Graham");
 });

toBeCalledTimes()

함수가 몇번 호출되었는지

abc();
abc();

expect(abc).toBeCalledTimes(2); // true

toBeCalledWith()

함수가 설정한 인자로 호출되었는지

abc('aa');
abc('aa');

expect(abc).toBeCalledWith('aa'); // true

toReturn() / toHaveReturned()

함수가 오류없이 반환되는지

toReturnTimes() / toHaveReturnedTimes()

지정한 횟수만큼 오류없이 무사히 반환되는 횟수

test('drink returns twice', () => {
  const drink = jest.fn(() => true);

  drink();
  drink();

  expect(drink).toHaveReturnedTimes(2); // 오류없이 리턴을 무사히 마친 횟수? -> 2
});

toReturnWith() / toHaveReturnedWith(value)

함수가 지정한 값을 반환하는지

test('내가 좋아하는 과일로 쉐이커를 만들었는지 반환', () => {
  const fruit = {favorite: 'apple'};
  const shaker = jest.fn(fruit => fruit.favorite);

  shaker(fruit);

  expect(shaker).toHaveReturnedWith('apple'); //shaker가 apple을 반환하는지
});
profile
학생 점심 좀 차려

0개의 댓글