对于我正在从事的项目,我一直在使用JavaScript库。我的代码的主要逻辑分为多个commonjs模块。我使用Google闭包将模块合并到一个输出js文件中,该文件可在AngularJS应用程序中使用。

我遇到的问题是尝试用睾丸进行测试。我收到的错误是Uncaught ReferenceError: require is not defined。之所以发生这种情况,是因为与Google闭包不同,testacular无法理解commonjs模块。我可以解决几个问题,但是我希望不必重新构建代码就能使它工作。

  • 我可以重新构造模块,以便不再使用commonjs。我不喜欢这样,因为感觉就像倒退了一步。我希望我的代码是模块化的。
  • 我可以在Google闭包的已编译js上运行testacular。我不介意以这种方式进行操作,但是我无法触发一切以进行文件更改。 Testacular可以在文件更改时重新运行自己,但是无论如何我都没有看到使Google Closure在更改时重新编译。
  • 最后,我可以在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 ...
    

    最佳答案

    似乎有/有Testacular的issue

    您可以尝试以下方法:

  • 清除npm缓存:npm cache clean
  • 安装另一个版本的testacular:npm install -g [email protected]
  • 关于javascript - 未捕获的ReferenceError : require is not defined,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14111785/

    10-10 03:03