私が取り組んでいるプロジェクトでは、JavaScriptライブラリの寄せ集めを使用しています。私のコードのメインロジックは、複数のcommonjsモジュールに分割されています。私はグーグルクロージャーを使用して、モジュールをAngularJSアプリケーション内で使用する1つの出力jsファイルに結合します。
私が抱えている問題は、testacularでテストを実行しようとしていることです。私が受け取るエラーはですUncaught ReferenceError: require is not defined
。これは、googleクロージャーとは異なり、testacularがcommonjsモジュールを理解しないために発生しています。いくつかの回避策がありますが、コードを再構築せずに機能させることを望んでいました。
- commonjsを使用しないように、モジュールを再構築できます。一歩後退したような気がするので、私はこれが好きではありません。コードをモジュール化したい。
- 私はグーグルクロージャーからコンパイルされたjsでtestacularを実行することができます。このようにしてもかまいませんが、ファイルの変更を処理するためにすべてをトリガーすることはできませんでした。Testacularはファイルの変更時にそれ自体を再実行できますが、変更時にgoogleクロージャーを再コンパイルする方法はとにかく見ていません。
- 最後に、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 ...