2012-08-02 5 views
1

제 질문은 모카를 사용하여 자바 스크립트 코드를 테스트하는 방법입니다. 궁극적으로 이것은 의존성 주입이나 Inversion of Control에 관한 질문 일 수 있습니다. 나는 이러한 개념을 잘 이해하지 못했습니다.Modernizr을 사용하는 단위 테스트 코드

단순히 header.js 인스턴스를 만들고 테스트하는 테스트를 작성하려고합니다. 그러나 다음과 같은 오류 메시지와 함께 Modernizr을로드 할 때 내 테스트가 불면 언제든지 그렇게합니다. Modernizr은 브라우저 내부에서 실행되기 때문에 발생하지만 내 단위 테스트는 명령 줄에서 실행해야합니다.

/lib/modernizr.js:8 

는 "MozAppearance는"l.style에서, S = 선택된 & & r에! b.createRange() compareNode, t의가 S L :.? n.parentNod ^ 오류 : 속성을 읽을 수없는 '인 parentNode' 의 정의되지 않은 /Users/devadmin/devenv/djscript/djscript-vendor/lib/modernizr.js:8:6291

에서 나는 다음과 같은 계층 구조의 일부 requirejs 모듈이 :

lib 
└── pj 
    ├── module 
    │   └── header 
    │    └── header.js 
    ├── util 
    │   └── header 
    │    └── Util.js 
    └── widget 
     └── header 
      ├── Header.js 
      └── view 
       ├── HeaderView.js 
       └── NavView.js 

header.js는 Header.js를 인스턴스화하고 Header.js는 HeaderView 및 NavView를 만듭니다. HeaderView 만 Modernizr이 필요합니다.

이 코드를 어떻게 테스트 가능한 상태로 만들 수 있는지에 대한 힌트가 있습니까? Modernizr을 requirejs와 함께 사용하여 패키지 한 것을 보는 것이 도움이 될까요?

답변

2

아니라, 내가 특별히 모카를 사용하지 않은하지만 당신이 시도하기 전에 당신은 ... ...

define(<module path/name - e.g. 'libs/modernizr'>, function(){ 
    return { 
     history: false, 
     foo: true, 
     bar: false 
    }; 
}); 

뭔가를 수행하여/하네스 당신의 검사 결과에 가짜 모더 나이저 인스턴스를 생성 할 수 있어야한다 테스트중인 모듈을로드하십시오. 그 가짜 인스턴스를 정의하면 테스트중인 모듈이 실제 modernizr lib 대신 가짜를 사용해야합니다.

기본적으로 AMD의 "명명 된 모듈"(링크 : http://requirejs.org/docs/api.html#modulename) 기능을 하이재킹하여 실제 모던 리즘을 가짜로 대체합니다. 이 방법으로 필요한 모든 상태를 명시 적으로 테스트 할 수 있습니다.

희망이 있습니다.

+0

이 도움이 될 것 같습니다. 내 테스트는 큰 혼란이었고,이 질문을 완전히 풀어 낼 수도있었습니다. – the0ther