2013-06-27 3 views
0

require와 karma를 사용하여 AngularJS 앱에 대한 테스트를 작성하는 데 문제가 있습니다. 카르마에서 메인 소스 파일을로드 할 때 무작위로 '모듈이 정의되지 않았습니다'라는 오류가 발생하며 그 이유를 알 수 없습니다. -AngularJS + Require + Karma - 테스트 실행에 문제가 있습니다.

var tests = []; 
for (var file in window.__karma__.files) { 
if (/Test\.js$/.test(file)) { 
    tests.push(file); 
    console.log(file); 
} 
} 


requirejs.config({ 
baseUrl:'base/', 
paths:{ 
    'angular':'main/webapp/components/angular-1.0.7', 
    'jquery':'main/webapp/components/jquery', 
    'jquery-ui':'main/webapp/components/jquery-ui', 
    'lodash':'main/webapp/components/lodash', 
    'underscore':'test/webapp/lib/underscore', 
    'angular-mocks':'test/webapp/lib/angular-mocks', 
    'requireLibChecker':'test/webapp/checker/requireLibChecker', 
    'bootstrap':'main/webapp/components/bootstrap/js/bootstrap', 
    'bootstrap-datepicker':'main/webapp/components/bootstrap/js/bootstrap-datepicker', 
    'app':'main/webapp/js/mcc', 
    'helper':'main/webapp/js/helper', 
    'js':'main/webapp/js' 
}, 

shim:{ 
    'angular':{ 
     exports:'angular' 
    }, 
    'angular-mocks':{ 
     exports:'angular-mocks' 
    }, 
    'underscore':{ 
     exports:'_' 
    }, 
    'jquery-ui':{ 
     deps:['jquery'], 
     exports:'jquery-ui' 
    }, 
    'bootstrap-datepicker':{ 
     deps:['jquery', 'bootstrap'], 
     exports:'datepicker' 
    } 
}, 
priority:[ 
    "angular" 
], 

// ask Require.js to load these files (all our tests) 
deps:tests, 

priority:['angular'], 


// start test run, once Require.js is done 
callback:window.__karma__.start 
}); 

내 주 1 소스 파일 (mcc.js)에 오류를 일으키는 다음

main 
-webapp 
-components 
    -{all my external libs} 
-js 
    -{my js files} 
test 
    -lib 
    angular-mocks.js 
    underscore.js 
    -webapp 
    karma.conf.js 
    server.js 
    test-main.js -> require js config 
    -unit 
    myTest.js 

내 테스트 main.js 정의된다 : 다음

내 프로젝트 구조는 karma를 통해로드 될 때 다음과 같이 정의됩니다. angular.bootstrap (document, [ 'mcc']); 은 임의로 오류를 일으 킵니다. 즉, 브라우저 (chrome, phantomJS)가 모듈을 찾으면 가끔씩 업장을 돌 때가 아닙니다. 일반 웹 응용 프로그램으로 실행하면 처음에는 항상 정상적으로 작동합니다.

답변

0

테스트를 수행 할 때 응용 프로그램을 부트 스트랩하지 않으려한다고 생각합니다. 해당 모듈을 다른 파일로 리팩토링하려 했습니까? 예를 들어 응용 프로그램을 실행할 때의 test-main.js에 해당하는 파일입니다.

require(['angular', 'helper'], function(angular, helper) { 

    angular.element(document).ready(function() { 

     /* MANUALLY LOAD TO WAIT FOR APP */ 
     angular.bootstrap(document, ['mcc']); --> This line causes the error 

     /* NAVIGATE TO TOP OF PAGE FOR MOBILE DEVICES */ 
     window.scrollTo(0, 1); 


}); 

아마 모든 업보에 의해로드 할 필요가 없습니다 :

는 내 말은 모듈이 있다는 것입니다.

관련 문제