对于我正在进行的一个项目,我一直在使用 JavaScript 库的大杂烩。我的代码的主要逻辑被分解为多个 commonjs 模块。我使用 google 闭包将模块组合成一个输出 js 文件,我在 AngularJS 应用程序中使用该文件。
我遇到的问题是尝试用 testacular 进行测试。我收到的错误是Uncaught ReferenceError: require is not defined
. 发生这种情况是因为,与谷歌关闭不同,testacular 不理解 commonjs 模块。我可以做一些变通方法,但我希望在不必重组代码的情况下使其工作。
- 我可以重新构建模块,以便不再使用 commonjs。我不喜欢这样,因为这感觉像是倒退了一步。我希望我的代码是模块化的。
- 我可以在从谷歌闭包编译的 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 ...