나는 다음과 같이 수행 모듈 패턴이 있습니다자바 스크립트 모듈 패턴 - 모든 메소드를 표시하는 방법?
var A = (function(x) {
var methodA = function() { ... }
var methodB = function() { ... }
var methodC = function() { ... }
...
...
return {
methA: methodA,
methB: methodB
}
})(window)
이 코드하자 제가 원하는 것입니다 무엇을 내가 좋아하는 A
에만 메타와 methB()
를 호출합니다. 이제 내가 가진 문제는 - 최소한의 노력으로 고통을 전혀 느끼지 않고 단위 테스트를하고 싶습니다.
먼저 그래도 나는 단순히 this
을 반환 할 수 있지만, 내가 잘못했다. window
개체를 반환합니다 (누군가가 이유를 설명 할 수 있습니까?). A.__exec('methA', arguments);
그것은 내가 원하는 거의이다
__exec: function() {
var re = /(\(\))$/,
args = [].slice.call(arguments),
name = args.shift(),
is_method = re.test(name),
name = name.replace(re, ''),
target = eval(name);
return is_method ? target.apply(this, args) : target;
}
이 방법은 나 같은 메서드를 호출하자 : 두 번째
- 내 반환 블록 내부에이 방법을 포함하는 - 어디 선가 온라인 솔루션을 발견 ,하지만 꽤 못생긴. test
은 프로덕션 코드에서 결코 사용되지 않을 것이라고 A.test.methA()
을 선호합니다. 이는 개인 메서드를 나타 내기위한 것입니다.
편집 나는 말해 사람들이 대신 작은 부품의 큰 일을 테스트하기 위해 참조하십시오. 설명하겠습니다. 필자의 의견으로는 API는 필요한 내부 메소드 만이 아니라 필요한 메소드만을 보여 주어야한다. 크기가 작고 기능이 제한되어 있기 때문에 내부가 테스트하기가 훨씬 쉬워서 모든 것을 테스트하고 잘못 된 부분을 추측 할 수 있습니다.
내가 잘못했을 수도 있지만, 나는 여전히 개체 자체에서 모든 메서드에 대한 참조를 반환 할 수있는 방법을보고 싶습니다. :)
당신은 단위 테스트 개인 방법을 사용하지 않거나 그들을 개인으로 만들지 않습니다. 간단합니다. – mpm
@mpm 개인용 코드도 코드이므로 테스트해야합니다. –
이것은 좋지 않습니다. 사적 방법은 사적이며, 공개 할 필요는 없습니다. 당신의 공개 방법을 테스트해라, 그들은 개인에 의존한다. 그래서 테스트하는 대중은 또한 이것을 포함해야한다. – dfsq