2014-12-01 6 views
1

단위 테스트에 대해 배우려고하고 있는데 Ben Alman이이 overview을 발견했습니다. 슬라이드 23에서 그는 객체 {a: 1}을 포함하는 변수 actual이 객체 자체와 어떻게 다른지를 보여줍니다. 그게 무슨 뜻 이죠? 그들은 같은 가치가 아닌가? 객체가 어떻게 다른가요?왜이 QUnit 테스트가 실패합니까?

test("deepEqual", 7, function() { 
    var actual = {a: 1}; 

    equal( actual, {a: 1}, "fails because objects are different"); 
    deepEqual(actual, {a: 1}, "passes because objects are equivalent"); 
    deepEqual(actual, {a: "1"}, "fails because '1' !== 1"); 

    var a = $("body > *"); 
    var b = $("body").children(); 

    equal( a,  b,  "fails because jQuery objects are different"); 
    deepEqual(a,  b,  "fails because jQuery objects are not equivalent"); 
    equal( a.get(), b.get(), "fails because element arrays are different"); 
    deepEqual(a.get(), b.get(), "passes because element arrays are equivalent"); 
}); 
+2

'=='JS (실제로는 대부분의 언어)에서 객체를 비교하는 방법을 잘 알고 있습니까? 그 대답은 바로 그 뒤를 따른다. –

+0

이 말은 바보 같아서 미안하지만 이해가 안갑니다. 나는'=='vs'==='에 대해 읽었으며''new String ("String")'== "String"'사실이고''new String ("String")'=== 같은 것을 이해합니다. "문자열"은 거짓입니다. 그러나 사물과 함께, 그것은 단지 나에게 이해가 가지 않습니다. 나는 타입을 놓쳤는지를보기 위해'console.log (실제 타입);을 사용했다. 그러나 그것들은 같은 타입이다. 다른 SO 응답에서 누군가 물건을 두 장의 빈 종이와 비교했습니다. 그것들은 두 종이 ('===')이지만, 다른 {a : 1}이 새로 생성 된 객체의 또 다른 인스턴스이므로 동일한 종이가 아닙니다 ('=='). – user2986242

+0

내가 어떻게 생각해야합니까? – user2986242

답변

0

JS의 객체는 값이 표시된 것처럼 보이지 않습니다. 대부분은 다른 경우가됩니다. Sameness in JavaScript에 대한 자세한 내용을 읽어보십시오. StackOverflow에 대한 자세한 내용은 muchbetter 답변도 있습니다.

deepEqual이 개체의 "동일성"을 결정하는 방법을 알 수 있습니다 here. 살펴볼 또 다른 좋은 점은 lodash's implementation

관련 문제