我的项目是使用 TypeScript 为前端开发的。
- Mocha - 用于单元测试
- JSDOM - 用于 DOM 模拟
- Hammer.js - 用于触摸 UX
- 咕噜声、JSMin 等
项目文件结构是这样的:
index.ts
mymodule.ts
mymodule_test.ts
由于 Hammer.js 在内部使用全局window
和document
对象,我在 import 语句之前添加了一些棘手的代码,仅用于测试目的。
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:
我搜索了一段时间,发现了一些关于此类错误的 Q&A。为避免该错误,我应该修改 JSDOM 的内部代码或删除mymodule.ts
. 但两者都买不起。
- 如果我删除 1 - 6 行
mymodule.ts
,我将无法运行测试。 - 修改 JSDOM 或 JSMin 的原始代码似乎不是正确的方法。
我该如何解决这个问题?我应该使用另一个 JavaScript 缩小器吗?或者不应该测试mymodule.js
包含 Hammer.js 导入语句?