expect.뒤에 붙는 기능들을 정리할 생각이다.
기대한 값이랑 실제 반환된 값이 일치하는지 확인하는 작업이다.
객체의 내용이 같은지
expect({username:"sohyun"}).toEqual({username:"sohyun"}); // true
객체의 내용이 같은지, 단 undefined를 고려한다.
test("toStrictEqual의 undefined 구분 여부", () => {
const obj = { a: undefined, b: 1 };
function test(testObj) {
return testObj;
}
expect(test(obj)).toStrictEqual({ b: 1 }); // fail
});
값 비교
expect(1+2).toBe(3); // true
expect({username:"sohyun"}).toBe({username:"sohyun"});
// false 객체의 내용이 같더라도 서로 다른 메모리에 있는 객체이기 때문
test('toBe는 obj가 같은 객체를 가리키고 있는지 확인한다', () => {
const obj = {};
expect(obj).toBe(obj); // true
});
toBe는 문자열이 정확한지만체크, toMatch는 정규식 확인에 쓰임
test("string", () => {
expect(user.email).toBe("user@test.com"); // 단순 문자열 비교
expect(user.email).toMatch(/.*test.com$/); // 정규식 비교
});
toBeTruthy
: true로 간주되면 테스트통과
toBeFalsy
: false로 간주되면 테스트통과
test('0은 string이다.',() => {
expect(0).toBeTruthy(); // 숫자0은 string이 아니다 : false => false
expect(0).toBeFalsy(); // 숫자0은 string이 아니다 : false => true
});
두개다 함수가 호출되었는지 여부
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
});
});
배열의 길이가 맞는지
const array = ['a','b'];
expect(array).toHaveLength(2); // 배열의 길이는 2 true
배열에 해당요소를 포함하는지
const array = ['a','b'];
expect(array).toContain('a'); // true
예외 발생 여부 ** 아직잘모르겠다.
객체에 해당 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");
});
함수가 몇번 호출되었는지
abc();
abc();
expect(abc).toBeCalledTimes(2); // true
함수가 설정한 인자로 호출되었는지
abc('aa');
abc('aa');
expect(abc).toBeCalledWith('aa'); // true
함수가 오류없이 반환되는지
지정한 횟수만큼 오류없이 무사히 반환되는 횟수
test('drink returns twice', () => {
const drink = jest.fn(() => true);
drink();
drink();
expect(drink).toHaveReturnedTimes(2); // 오류없이 리턴을 무사히 마친 횟수? -> 2
});
함수가 지정한 값을 반환하는지
test('내가 좋아하는 과일로 쉐이커를 만들었는지 반환', () => {
const fruit = {favorite: 'apple'};
const shaker = jest.fn(fruit => fruit.favorite);
shaker(fruit);
expect(shaker).toHaveReturnedWith('apple'); //shaker가 apple을 반환하는지
});