Karma Test Runner和Closure Library“Not SERVED FILE”

时间:2013-06-13 15:37:04

标签: angularjs google-closure-compiler google-closure-library karma-runner

我们在共享代码的几个不同项目中使用闭包库。我们现在正在其中一个项目中启动AngularJS,我们正试图让Karma转轮正常工作。

我已经按照这篇文章的建议,但无法让它一直运作。 How to configure karma-runner (also known as testacular) to work with closure-library

它正在goog.require('my.namespaced.file'),但是当我的/ namespaced / file.js有一个goog.require('goog.dom')或来自闭包库的东西时,Karma runner呕吐出来......

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',
];

1 个答案:

答案 0 :(得分:2)

TL;博士;您需要将{pattern: 'lib/goog/deps.js', included: false, served: false}添加到文件列表中,其中lib/goog/deps.js是您的闭包库版本中deps.js文件的路径。

好吧,所以我挖掘了Karma网络服务器和Karma闭包插件,发现了问题。

问题出在第103行的web-server.js中,这是由于缺少文件依赖性。当前karma-closure插件在缺少依赖项时不会报告错误,而是添加一个路径为undefined的文件指针,最终导致web-server.js文件爆炸(这是你所看到的。)

在我的情况下,我错过了对我的所有文件执行预处理器,因此我的一个项目依赖项没有被映射导致它爆炸。在你的情况下,你似乎错过了关闭deps.js文件。如果您注意到the demo conf file,则需要手动包含闭包库deps.js文件。没有这个文件,闭包提供的命名空间(goog.dom等)没有被映射。

我还在GitHub上添加了一个pull request,它为缺少的依赖项添加了一条错误消息,而不是让web-server.js爆炸。

相关问题