【发布时间】:2012-12-16 05:08:31
【问题描述】:
对于我正在处理的项目,我一直在使用 JavaScript 库的大杂烩。我的代码的主要逻辑被分解为多个 commonjs 模块。我使用 google 闭包将模块组合成一个输出 js 文件,我在 AngularJS 应用程序中使用该文件。
我遇到的问题是尝试使用 testacular 进行测试。我收到的错误是Uncaught ReferenceError: require is not defined。发生这种情况是因为,与谷歌关闭不同,testacular 不理解 commonjs 模块。我可以做一些变通的方法,但我希望在不必重组代码的情况下让它工作。
- 我可以重新构建模块,以便不再使用 commonjs。我不喜欢这样,因为这感觉像是倒退了一步。我希望我的代码是模块化的。
- 我可以在从 google 闭包编译的 js 上运行 testacular。我不介意这样做,但我无法触发一切来处理文件更改。 Testacular 可以在文件更改时重新运行,但我还没有看到让谷歌关闭重新编译更改。
- 最后,我可以在 testacular 中启用 commonjs 模块。理想情况下,这是我想走的路,但它可能不是最简单的。
有没有其他人遇到过类似的问题?我愿意尝试不同的事情;我只是不想要任何骇人听闻的东西。
javaclassstreamreader.spec.js:
"use strict"
var JavaClassStreamReader = require('../javaclassstreamreader.js').JavaClassStreamReader;
describe('javaclassstreamreader', function() {
it('reader can be constructed', function() {
var dataView = {
byteLength : 0
};
//FIXME load dataView
var reader = new JavaClassStreamReader(dataView);
expect(reader.dataView).toBe(dataView);
expect(reader.offset).toBe(0);
expect(reader.maxOffset).toBe(0);
});
});
javaclassstreamreader.js:
function JavaClassStreamReader(dataView, initialOffset, maxBytesToRead) {
this.dataView = dataView;
this.offset = initialOffset || 0;
this.maxOffset = this.offset + (maxBytesToRead || this.dataView.byteLength);
}
//... code trucated ...
【问题讨论】:
-
我的回答和你的问题一样多:你必须定义'require'......正如Praveen所说,给我们一些代码sn-ps,......
-
听起来您的脚本中正在使用名为
require(...)的函数,并且在定义require函数的位置未加载库文件。贴出相关代码。 -
require()是 commonjs 规范的一部分。
标签: javascript angularjs karma-runner google-closure-library commonjs