Для проекта, над которым я работаю, я использую hodgepodge библиотек JavaScript. Основная логика моего кода разбита на несколько модулей commonjs. Я использую google закрытия, чтобы объединить модули в один выходной файл js, который я использую в своем приложении AngularJS.
Проблема, с которой я столкнулась, заключается в попытке выполнить тесты с testacular. Ошибка, которую я получаю, составляет Uncaught ReferenceError: require is not defined
. Это происходит потому, что, в отличие от закрытия Google, testacular не понимает модули commonjs. Есть пара работ, которые я могу сделать, но я надеялся, что это сработает без перестройки моего кода.
- Я могу восстановить модули, чтобы я больше не использовал commonjs. Мне это не нравится, потому что это похоже на шаг назад. Я хочу, чтобы мой код был модульным.
- Я могу запустить testacular на скомпилированном js из закрытия Google. Я не против делать это таким образом, но я не смог запустить все, чтобы работать над изменениями файлов. Testacular может повторно запускаться при изменениях файла, но я все равно не видел, чтобы заставить Google закрывать повторную компиляцию при изменениях.
- Наконец, я могу включить модуль commonjs в testacular. В идеале это то, как я хочу идти, но это может быть не самый простой.
Кто-нибудь еще сталкивается с подобной проблемой? Я открыт для разных целей; Я просто ничего не хочу взломать.
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 ...