Мой проект разработан с использованием TypeScript для внешнего интерфейса.
- Mocha - для модульного теста
- JSDOM - для DOM-насмешки
- Hammer. js - для touch UX
- Grunt, JSMin, et c.
Структура файла проекта выглядит примерно так:
index.ts
mymodule.ts
mymodule_test.ts
As Hammer. js использует глобальный объект window
и document
для внутреннего использования, перед оператором импорта я добавил несколько хитрых кодов для целей только тестирования.
mymodule.ts
1: import * as jsdom from 'jsdom';
2: if (typeof window === 'undefined') {
3: let testDom: HTMLDocument = jsdom.jsdom('', undefined);
4: (<any> global).window = testDom.defaultView;
5: (<any> global).document = testDom;
6: }
7: import * as Hammer from 'hammerjs';
...
Теперь тест выполняется успешно. Но сборка завершается неудачно и выдает следующую ошибку:
Running "shell:minify" (shell) task
/home/yunbo/Workspace/jobkey/frontend/node_modules/jsmin/jsmin.js:231
throw 'Error: unterminated string literal: ' + a;
^
Error: unterminated string literal:
Я некоторое время искал и нашел несколько вопросов и ответов о такой ошибке. Чтобы избежать этой ошибки, я должен изменить внутренний код JSDOM или удалить 1 - 6 строк в mymodule.ts
. Но оба варианта недоступны.
- Если я удаляю 1-6 строк в
mymodule.ts
, я не могу запустить тесты. - изменение исходного кода JSDOM или JSMin кажется не правильный путь.
Как я могу решить эту проблему? Должен ли я использовать другой JavaScript minifier? Или не стоит тестировать mymodule.js
, который включает Hammer. js оператор импорта?