使命:
我有一个遗留的、未缩小的 Angular 1 应用程序,其中包含数千个测试,都通过了。我在代码中引入了缩小和修改。如果我将库和应用程序代码分开,测试将继续工作。但是,我无法破坏应用程序代码,因为这样做会将合同破坏回 libs 文件。
我希望能够破坏应用程序代码并保持单元测试正常工作。
当前状态:
我已经创建了两条路径来规避这个问题,但我并不满意,因为单元测试并没有真正触及将要投入生产的代码......他们正在触及为避免重整问题而创建的中间立场。
路径 1
一条路径输出 alibs.min.js
和 an app.min.js
。里面libs.min.js
有 Angular、Underscore 等 - 使用它们提供的缩小版本。本质libs.min.js
上只是一堆已经缩小的文件连接在一起。 app.min.js
包含我们的应用程序代码,已缩小但未损坏。
路径 2
第二个路径创建一个combined.min.js
文件。这就是生产。在这个文件中,依次是 Angular、Underscore 等,然后是我们的应用程序代码。所有这些都未缩小(包括库)连接到这个文件中,然后一起被修改/缩小,以便我们得到一个可以引用我们的应用程序代码和库代码的单一源映射。这在浏览器中有效,但单元测试中断,因为combined.min.js
不包含所需的仅测试库angular-mocks
。
问题:
由于 Karma 加载了这些文件,因此针对路径一进行测试是可行的。这很好,但它不是将要投入生产的实际代码,所以我不认为这是一场胜利。
- libs.min.js
- angular-mocks(未缩小 - 并且可以绑定到 Angular,因为我们使用的是提供的缩小版本)
- app.min.js(缩小但未损坏,因为损坏将合同破坏回 libs.min.js)
- *.spec.js
测试路径 2 不起作用,因为我们按以下顺序加载内容:
- 组合.min.js
- 角度模拟(未缩小)
- *.spec.js
卡布姆。我们的应用程序代码已经连接了它的绑定,所以 angular-mocks 为时已晚。除了将库和应用程序加载到单独的文件中(例如在路径一中)之外,我看不到任何解决此问题的方法。
一些测试通过了,但那些试图引用我们依赖 angular-mocks 的任何东西的测试都失败了。
我知道我可以提供一个输入源映射,app.min.js
以便我可以单独缩小/修改应用程序代码(但始终反对libs.min.js
),但我不确定这是最好的路线。我想把东西保存在一个大文件中,但如果没有其他办法,看起来我用来破坏/缩小(UglifyJS)的库支持输入源映射......
哦。此外,我们没有使用 Grunt 或 Gulp。只需直接 NPM 即可完成所有这些工作。但是如果有一个 grunt 或 gulp 库能以某种方式解决这个问题,我可以对其进行 NPM 化。