2011-04-18 4 views
3

나는 QUnit을 가지고 놀고 있는데, 나는 비틀 거리는 것이 하나있다. 왜이 QUnIT RegExp 테스트가 실패합니까?

나는 크롬에이 간단한 테스트를 시도 :

deepEqual(new RegExp(), /(?:)/); 

나는 new RegExp() 반환 개발자 콘솔에서 /(?:)/ 때문에, 통과 것이다 가정했다. '단지'RegExp에 대해 new RegExp() === /(?:)/을 수행 할 수는 없지만 toString()은 동일한 기능을 수행하고 은 모두과 같습니다. 실패

deepEqual(new RegExp(" "),//); 

을 그래서, 다음은 첫 번째 테스트에서 :

나는 문자 적 ​​/ 비 문자 표기법 차이를 만들 것입니다,하지만이 테스트를 통과하기 때문에 그런 경우가 될 수 없다는 생각

test("test", function() { 
    deepEqual(new RegExp(), /(?:)/); // fail 
    deepEqual(new RegExp(" "),//); // pass 
    equal(new RegExp().toString(), /(?:)/.toString()); // pass 
}); 

따라서 첫 번째 테스트가 실패한 이유는 누군가가 올바른 방향으로 나를 가리킬 수 있습니까?

답변

3

짧은 답변 다음 source 속성의 값은 /(?:)/ 문자 그대로 정규식 - 당신이 new RegExp()에서 얻을 목적 다릅니다. 리터럴의 경우에는 /(?:)/이지만 개체의 경우에는 빈 문자열입니다. / /new RegExp(" ")을 수행하면 source 속성의 값이 동일합니다 (둘 다 공백이 하나 인 문자열 임).

는 긴 대답는 : 당신이 Qunit의 소스를 보면, 당신은 코드의이 비트 볼 수 있습니다 : 소스 매개 변수는이 코드를 사용하여 다른 방법

"regexp": function (b, a) { 
    return QUnit.objectType(b) === "regexp" && 
     a.source === b.source && // the regex itself 
     a.global === b.global && // and its modifers (gmi) ... 
     a.ignoreCase === b.ignoreCase && 
     a.multiline === b.multiline; 
}; 

당신은 볼 수 있습니다 (단순히 속성을 출력 각 정규식 인수와 평등에 대한 테스트 그들)의 : 당신이 eq(/(?:)/, new RegExp());와이를 호출 할 때

function eq(x, y) { 
    console.log("x.source:", "'" + x.source + "'", "y.source:", "'" + y.source + "'", "===:", x.source === y.source); 
    console.log("x.global:", x.global, "y.global:", y.global, "===:", x.global === y.global); 
    console.log("x.ignoreCase:", x.ignoreCase, "y.ignoreCase:", y.ignoreCase, "===:", x.ignoreCase === y.ignoreCase); 
    console.log("x.multiline:", x.multiline, "y.multiline:", y.multiline, "===:", x.multiline === y.multiline); 
} 

, 당신은 얻을 :

eq(/ /, new RegExp(" "));로를 호출 할 때 반면에 당신이 얻을 :

x.source: ' ' y.source: ' ' ===: true 
x.global: false y.global: false ===: true 
x.ignoreCase: false y.ignoreCase: false ===: true 
x.multiline: false y.multiline: false ===: true 
+0

감사합니다. 귀하의 설명은 매우 분명합니다. – pimvdb

+0

@pimvdb 환영합니다! :) –

관련 문제