3

我的项目是使用 TypeScript 为前端开发的。

  • Mocha - 用于单元测试
  • JSDOM - 用于 DOM 模拟
  • Hammer.js - 用于触摸 UX
  • 咕噜声、JSMin 等

项目文件结构是这样的:

index.ts
mymodule.ts
mymodule_test.ts

由于 Hammer.js 在内部使用全局windowdocument对象,我在 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 导入语句?

4

0 回答 0