인프런 커뮤니티 질문&답변
matcher 관련 질문입니다.
작성
·
149
답변 1
0
John Ahn
지식공유자
안녕하세요 !!
expect("1").toEqual("1")은 아마 어디 설정이 잘못 되어 있는게 아닌가 싶습니다 !
원시 타입 데이터(primitive type)를 비교할 때는 toBe와 toEqual을 써도 차이가 없습니다.
하지만 참조 타입 데이터(reference type)를 비교할 때는 차이가 나는데 우선 예를 보겠습니다.
test('should ', () => {
let a = {a: "1", b: "2"}
let b = {a: "1", b: "2"}
expect(a).toEqual(b);
})
이거는 잘 Pass가 됩니다.
test('should ', () => {
let a = {a: "1", b: "2"}
let b = {a: "1", b: "2"}
expect(a).toBe(b);
})
하지만 이렇게 되면 FAIL이 나옵니다.
그 이유는 toBe 나 toStricEqaul은 Deep Equality Check 을 하기 때문입니다.
더 딥하게 체크를하는거죠 !
test('should ', () => {
let a = {a: "1", b: "2"}
let b = {a: "1", b: "2"}
let c = a;
expect(a).toBe(c);
})
이렇게 하면 또 성공을 합니다!
그 이유는 a와 b는 비록 객체안에 내용은 같지만 메모리안에 객체를 저장할 때 그 인스턴스는 서로 다르기 떄문입니다. 하지만 a와 c는 같습니다. 그러기에 toBe를 사용해서 Deep Equality Check을 해도 PASS하게 됩니다.
수고하세요 !!!





우와 자세한 답변 감사합니당