2

코드를 공유하는 여러 프로젝트에서 클로저 라이브러리를 사용합니다. 우리는 현재 AngularJS 프로젝트 중 하나에서 시작하고 있습니다. 우리는 Karma 러너가 올바르게 작동하도록 노력하고 있습니다.카르마 테스트 러너 및 클로저 라이브러리 "서비스가 제공되지 않음"

나는이 게시물의 조언을 따랐지만 모든 방법으로 작동하지는 않습니다. How to configure karma-runner (also known as testacular) to work with closure-library

('my.namespaced.file')를 goog.require하기 위해 노력하고 있지만 내/네임 스페이스가/file.js이 폐쇄 라이브러리에서 goog.require ('goog.dom') 또는 무언가가있는 경우, 카르마 러너 여기

Starting Karma Server (http://karma-runner.github.io) 
------------------------------------------------------------------- 
INFO [karma]: Karma v0.9.2 server started at http://localhost:9876/ 
INFO [launcher]: Starting browser Chrome 
NOT SERVED FILE undefined 
INFO [Chrome 27.0 (Mac)]: Connected on socket id 3tRuxHEhooSb458fJnFt 
ERROR [karma]: [TypeError: Cannot call method 'indexOf' of undefined] 
TypeError: Cannot call method 'indexOf' of undefined 
    at /usr/local/lib/node_modules/karma/lib/web-server.js:103:28 
    at Array.map (native) 
    at /usr/local/lib/node_modules/karma/lib/web-server.js:91:43 
    at /usr/local/lib/node_modules/karma/lib/web-server.js:37:35 
    at fs.js:266:14 
    at Object.oncomplete (fs.js:107:15) 

내 karma.conf.js이

basePath = '../../../../'; 

// frameworks to use 
frameworks = ['jasmine', 'closure']; 

// list of files/patterns to load in the browser 
files = [ 
// closure base 
{pattern: 'closure-library/closure/goog/base.js', watched: false, included: true, served: true}, 
{pattern: 'ne-js/src/main/js/ne-js.deps.js', watched: false, included: true, served: true}, 
{pattern: 'angular-ne/src/main/js/angular-ne.deps.js', watched: false, included: true, served: true}, 
{pattern: 'ne-webServices/src/main/js/ne-webServices.deps.js', watched: false, included: true, served: true}, 
{pattern: 'directives/src/main/js/directives.deps.js', watched: false, included: true, served: true}, 
{pattern: 'webapp/src/main/js/webapp.deps.js', watched: false, included: true, served: true}, 
{pattern: 'webapp/src/test/lib/angular.js', watched: false, included: false, served: true}, 
{pattern: 'webapp/src/test/lib/angular-mocks.js', watched: false, included: false, served: true}, 

{pattern: 'webapp/src/main/js/**/*.js', watched: true, included: false, served: true}, 
{pattern: 'webapp/src/test/js/**/*.js', watched: true, included: true, served: true}, 
]; 

preprocessors = { 
'webapp/src/test/js/**/*.js': ['closure', 'closure-iit'], 
'webapp/src/main/js/**/*.js': ['closure'], 
}; 

autoWatch = true; 
browsers = ['Chrome']; 

// plugins to load 
plugins = [ 
'testacular-closure', 
'karma-jasmine', 
'karma-chrome-launcher', 
'karma-phantomjs-launcher', 
]; 
+0

내 대답으로 질문이 해결되지 않습니까? – Boushley

답변

2

TL 파일은 ... 아웃이 pukes, 닥터; 파일 목록에 {pattern: 'lib/goog/deps.js', included: false, served: false}을 추가해야합니다. 여기서 lib/goog/deps.js은 사용자의 closure-library 버전에있는 deps.js 파일의 경로입니다.

좋아, 그래서 카르마 웹 서버와 갈마 폐쇄 플러그인을 파고 문제를 발견.

파일 종속성이 없음으로 인해 103 행의 web-server.js에 문제가 있습니다. 현재 karma-closure plugin은 종속성이없는 경우 오류를보고하지 않고 결국 undefined의 경로를 가진 파일 포인터를 추가합니다. 결국 web-server.js 파일이 폭발합니다 (이는 봄).

필자의 경우 모든 파일에서 전처리 기가 필요하지 않았기 때문에 프로젝트 종속성 중 하나가 매핑되지 않아서 불어났습니다. 귀하의 경우에는 폐쇄 deps.js 파일이 누락 된 것처럼 보입니다. the demo conf file에 눈에 띄면 클로저 라이브러리 deps.js 파일을 수동으로 포함시켜야합니다. 이 파일이 없으면 클로저 제공 네임 스페이스 (goog.dom 등)가 매핑되지 않습니다.

또한 GitHub에 pull request을 추가하여 web-server.js가 파열되는 대신 종속성 누락에 대한 오류 메시지를 추가합니다.

+0

마침내 다시 돌아올 기회가있었습니다. 답변 해주셔서 감사합니다. 오늘 저는 신선한 카르마와 새로운 카르마 클로저 플러그인을 설치할 수 있었고 저는 사업을 시작했습니다. 나는 또한 모든 goog. * 코드를 제외하고는 good.require/provide를 제외한 코드를 추출했다. –