Я столкнулся со странной проблемой, когда при попытке запустить мои тесты через angular-cli, и webpack, похоже, не может скомпилировать мое приложение. В частности, он не похож на модуль узла, который я импортирую в один из моих исходных файлов TS.
Я использую свой собственный модуль узла (еще не опубликованный в npm), у которого файл ввода определен так:
index.js
const MyModule = require('./src/index.js');
const myModule = new MyModule();
module.exports = {
doStuff: myModule.doStuff,
doOtherStuff: myModule.doOtherStuff
}
В моем исходном файле TS (приложение Angular) я включаю модуль следующим образом:
import MyModule = require('@acme/mymodule');
Это прекрасно работает при запуске приложения, и я могу вызвать функцию, представленную в модуле, в моем коде, как и ожидалось.
Когда я запускаю тесты, я получаю следующую ошибку:
16 01 2019 13:22:11.662:DEBUG [middleware:source-files]: Fetching /_karma_webpack_/main.bundle.js
16 01 2019 13:22:12.067:DEBUG [phantomjs.launcher]: TypeError: undefined is not an object (evaluating 'modules[moduleId].call')
16 01 2019 13:22:12.067:DEBUG [phantomjs.launcher]: http://localhost:9876/_karma_webpack_/inline.bundle.js:55 in __webpack_require__
http://localhost:9876/_karma_webpack_/main.bundle.js:10045 in ../../../../../src/test.ts
http://localhost:9876/_karma_webpack_/inline.bundle.js:55 in __webpack_require__
http://localhost:9876/_karma_webpack_/inline.bundle.js:26 in webpackJsonpCallback
PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
SyntaxError: Expected an identifier but found 'MyModule' instead
at http://localhost:9876/_karma_webpack_/scripts.bundle.js:327
PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
SyntaxError: Expected an identifier but found 'MyModule' instead
at http://localhost:9876/_karma_webpack_/scripts.bundle.js:327
PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
SyntaxError: Expected an identifier but found 'MyModule' instead
at http://localhost:9876/_karma_webpack_/scripts.bundle.js:327
16 01 2019 13:22:12.070:DEBUG [karma]: Run complete, exiting.
16 01 2019 13:22:12.071:DEBUG [launcher]: Disconnecting all browsers
Я задавался вопросом, было ли это как-то связано с моим использованием const
, и поэтому я изменил на var
, и это фактически возвращает мое прошлое к ошибке.
Я бы предпочел использовать const
и let
во всем исходном модуле моего узла, что я сейчас и делаю, есть ли что-то дополнительное, что мне нужно настроить с помощью karma \ webpack для компиляции во время тестового прогона, чтобы мой режим модуля будет включен? Или это может быть связано с тем, что PhantomJS интерпретирует мое использование require()
в моем файле TS?
Обновление
Итак, я попробовал использовать хром без головы для своих тестов, и я получаю require is not defined
ошибки из веб-пакета. Итак, я предполагаю, что мне нужно запустить препроцессор поверх исходного файла моего модуля узла?