2011-03-05 8 views
6

의 내가 자바 스크립트에서 다음 모듈 종류의 패턴을 사용했다 가정 해 봅시다 :단위 테스트 개인 클래스

var myModule = (function() { 
    var Foo = function() { /* ... */ }; 
    var Bar = function() { 
     this.foo = new Foo(); 
    }; 
    Bar.prototype.someMethod = function() { 
     this.foo.someMethod(); 
    }; 
    return { 
     'Bar': Bar 
    }; 
})(); 

가 좋습니다 그리고 네 경우 - 어떻게 단위 테스트에 대한 푸 노출 될 수 있습니까? 이것을하기위한 몇 가지 공통 기술이나 패턴이 있습니까?

답변

6

당신은 정말로 단위 테스트를해야한다고 생각하지 않습니다 private 회원. 공개 회원에 대한 포괄적 인 테스트가있는 한 비공개 회원의 모든 오류는 공개 회원에게 오류로 표시됩니다. 그런 다음 좋은 ol '디버깅을 사용하여 정확한 문제가 무엇인지 찾아 낼 수 있습니다.

다른 방법으로 테스트를 프로덕션 환경으로 실행하는 경우 엔 클로징 객체를 노출하고 테스트 할 수 있습니다. 배포하기 전에 둘러싼 객체에 대한 참조를 제거해야합니다. 그렇지 않으면 어떻게 든 자동화 할 수 있습니다. 솔직히 말해서, 공공 소비를 위해 도서관을 포장하지 않는 한 일반적으로 그것을 제거하지 않아도됩니다. 이 명확하게 접근 개인 회원이 수행 할 수없는 것을 이해되면 개인 데이터/기능에 액세스 할 수있는 사내 시스템의 경우

var myModule = (function() { 
    var _this = this; 
    var Foo = function() { /* ... */ }; 
    var Bar = function() { 
     this.foo = new Foo(); 
    }; 
    Bar.prototype.someMethod = function() { 
     this.foo.someMethod(); 
    }; 
    return { 
     'Bar': Bar, 
     '__private__': _this 
    }; 
})(); 

function test_foo(obj) { 
    var foo = obj.__private__.Foo; 
    assert(foo.prop, 10) 
} 

는 비 문제 일반적으로입니다. 이것은 __private__과 같은 이름을 가진 둘러싼 객체에 대한 참조를 제공함으로써 강조됩니다. (내가 파이썬에 대해 알 수 있습니까?))

관련 문제