angularjs - Karma 测试运行器和闭包库 "NOT SERVED FILE"

标签 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') 但当 my/namespaced/file.js 有 goog.require('goog.dom') 或闭包库中的某些内容时,Karma 运行程序吐出这个...

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

最佳答案

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

好吧,所以我深入研究了 Karma Web 服务器和 Karma 关闭插件并发现了问题。

问题出现在 web-server.js 的第 103 行,原因是缺少文件依赖项。目前,karma-closure 插件在缺少依赖项时不会报告错误,而是添加路径为 undefined 的文件指针,最终导致 web-server.js 文件崩溃(这就是您所看到的)。

就我而言,我错过了对所有文件进行预处理,因此我的项目依赖项之一没有被映射,导致它崩溃。在您的情况下,您似乎缺少关闭 deps.js 文件。如果您注意到 the demo conf file您需要手动包含闭包库 deps.js 文件。如果没有此文件,则不会映射闭包提供的 namespace (goog.dom 等)。

我还添加了 pull request在 GitHub 上添加缺少依赖项的错误消息,而不是让 web-server.js 崩溃。

关于angularjs - Karma 测试运行器和闭包库 "NOT SERVED FILE",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17091218/

相关文章:

mysql - restangular如何与MySQL数据库对话

javascript - Angular js使 slider 具有无限效果

javascript - Google Closure Compiler 会降低性能吗?

java - 使用 rhino 或闭包编译器从 java 更改 javascript 变量和函数名称

javascript - 为什么 goog.crypt.base64.decodeStringToByteArray(string) 在这里返回无效的字节数组?

javascript - 如何通过评估表达式来制作自定义 HTML id

javascript - 白名单在 Ionic 中不起作用

javascript - 闭包编译器不会删除未使用的属性

javascript - 如何使用 Google 的 Closure 库获取 DOM 元素的当前视口(viewport)位置?

javascript - 闭包库 ondevicemotion 从未触发