【发布时间】:2017-02-21 11:56:13
【问题描述】:
一个基本的Generated Angular 2 cli application 有一些因果报应测试。
如果你那么npm install typemoq --save-dev
并将使用 typemoq 的内容添加到其中一个测试文件中。
import * as Moq from 'typemoq';
...
it('pointless test is pointless', async(() => {
let carMock = Moq.Mock.ofInstance(Car);
}));
class Car { ... }
然后,当运行测试时,会发生以下错误。有没有人见过这种将 typemoq 与 angular-cli 一起使用或将依赖项引入 angular-cli 项目的情况?这里有什么问题?
TypeError:无法读取未定义的属性“substr” 在功能。 (C:\Source\ng-example-app\foo\node_modules\webpack-sources\node_modules\source-map\lib\source-node.js:115:26) 在 Array.forEach (本机) 在 SourceMapConsumer_eachMapping [as eachMapping] (C:\Source\ng-example-app\foo\node_modules\webpack-sources\node_modules\source-map\lib\source-map-consumer.js:155:14) 在 Function.SourceNode_fromStringWithSourceMap [as fromStringWithSourceMap] (C:\Source\ng-example-app\foo\node_modules\webpack-sources\node_modules\source-map\lib\source-node.js:80:24) 在 SourceMapSource.node (C:\Source\ng-example-app\foo\node_modules\webpack-sources\lib\SourceMapSource.js:42:20) 在 ReplaceSource.node (C:\Source\ng-example-app\foo\node_modules\webpack-sources\lib\ReplaceSource.js:66:29) 在 C:\Source\ng-example-app\foo\node_modules\webpack-sources\lib\ConcatSource.js:40:49 在 Array.map (本机) 在 ConcatSource.node (C:\Source\ng-example-app\foo\node_modules\webpack-sources\lib\ConcatSource.js:39:60) 在 C:\Source\ng-example-app\foo\node_modules\webpack-sources\lib\ConcatSource.js:40:49 在 Array.map (本机) 在 ConcatSource.node (C:\Source\ng-example-app\foo\node_modules\webpack-sources\lib\ConcatSource.js:39:60) 在 C:\Source\ng-example-app\foo\node_modules\webpack-sources\lib\ConcatSource.js:40:49 在 Array.map (本机) 在 ConcatSource.node (C:\Source\ng-example-app\foo\node_modules\webpack-sources\lib\ConcatSource.js:39:60) 在 C:\Source\ng-example-app\foo\node_modules\webpack-sources\lib\ConcatSource.js:40:49 在 Array.map (本机) 在 ConcatSource.node (C:\Source\ng-example-app\foo\node_modules\webpack-sources\lib\ConcatSource.js:39:60) 在 ConcatSource.proto.sourceAndMap (C:\Source\ng-example-app\foo\node_modules\webpack-sources\lib\SourceAndMapMixin.js:28:18) 在 CachedSource.sourceAndMap (C:\Source\ng-example-app\foo\node_modules\webpack-sources\lib\CachedSource.js:51:28) 在编译。 (C:\Source\ng-example-app\foo\node_modules\webpack\lib\SourceMapDevToolPlugin.js:57:32) 在 Array.map (本机) 在编译。 (C:\Source\ng-example-app\foo\node_modules\webpack\lib\SourceMapDevToolPlugin.js:43:84) 在 Array.forEach (本机) 在编译。 (C:\Source\ng-example-app\foo\node_modules\webpack\lib\SourceMapDevToolPlugin.js:42:11) 在 Compilation.applyPlugins (C:\Source\ng-example-app\foo\node_modules\tapable\lib\Tapable.js:25:14) 在编译。 (C:\Source\ng-example-app\foo\node_modules\webpack\lib\Compilation.js:616:10) 在 Compilation.applyPluginsAsync (C:\Source\ng-example-app\foo\node_modules\tapable\lib\Tapable.js:73:70) 在编译。 (C:\Source\ng-example-app\foo\node_modules\webpack\lib\Compilation.js:612:9) 在 Compilation.applyPluginsAsync (C:\Source\ng-example-app\foo\node_modules\tapable\lib\Tapable.js:73:70) 在编译。 (C:\Source\ng-example-app\foo\node_modules\webpack\lib\Compilation.js:608:8) 在 Compilation.applyPluginsAsync (C:\Source\ng-example-app\foo\node_modules\tapable\lib\Tapable.js:73:70) 在 Compilation.seal (C:\Source\ng-example-app\foo\node_modules\webpack\lib\Compilation.js:554:7) 在编译器。 (C:\Source\ng-example-app\foo\node_modules\webpack\lib\Compiler.js:468:16) 在 C:\Source\ng-example-app\foo\node_modules\tapable\lib\Tapable.js:152:11 在编译。 (C:\Source\ng-example-app\foo\node_modules\webpack\lib\Compilation.js:452:10) 在 C:\Source\ng-example-app\foo\node_modules\webpack\lib\Compilation.js:423:12 在 C:\Source\ng-example-app\foo\node_modules\webpack\lib\Compilation.js:335:10 在 C:\Source\ng-example-app\foo\node_modules\webpack\node_modules\async\lib\async.js:52:16 完成后(C:\Source\ng-example-app\foo\node_modules\webpack\node_modules\async\lib\async.js:246:17) 在 C:\Source\ng-example-app\foo\node_modules\webpack\node_modules\async\lib\async.js:44:16 在 C:\Source\ng-example-app\foo\node_modules\webpack\lib\Compilation.js:335:10 在 C:\Source\ng-example-app\foo\node_modules\webpack\node_modules\async\lib\async.js:52:16 完成后(C:\Source\ng-example-app\foo\node_modules\webpack\node_modules\async\lib\async.js:246:17) 在 C:\Source\ng-example-app\foo\node_modules\webpack\node_modules\async\lib\async.js:44:16 在 C:\Source\ng-example-app\foo\node_modules\webpack\lib\Compilation.js:335:10 在 C:\Source\ng-example-app\foo\node_modules\webpack\node_modules\async\lib\async.js:52:16 完成后(C:\Source\ng-example-app\foo\node_modules\webpack\node_modules\async\lib\async.js:246:17) 在 C:\Source\ng-example-app\foo\node_modules\webpack\node_modules\async\lib\async.js:44:16 在 C:\Source\ng-example-app\foo\node_modules\webpack\lib\Compilation.js:335:10 在 C:\Source\ng-example-app\foo\node_modules\webpack\node_modules\async\lib\async.js:52:16 完成后(C:\Source\ng-example-app\foo\node_modules\webpack\node_modules\async\lib\async.js:246:17) 在 C:\Source\ng-example-app\foo\node_modules\webpack\node_modules\async\lib\async.js:44:16 在 C:\Source\ng-example-app\foo\node_modules\webpack\lib\Compilation.js:335:10 在 C:\Source\ng-example-app\foo\node_modules\webpack\node_modules\async\lib\async.js:52:16 在 Object.async.forEachOf.async.eachOf (C:\Source\ng-example-app\foo\node_modules\webpack\node_modules\async\lib\async.js:236:30) 在 Object.async.forEach.async.each (C:\Source\ng-example-app\foo\node_modules\webpack\node_modules\async\lib\async.js:209:22) 在 Compilation.addModuleDependencies (C:\Source\ng-example-app\foo\node_modules\webpack\lib\Compilation.js:192:8) 在 Compilation.processModuleDependencies (C:\Source\ng-example-app\foo\node_modules\webpack\lib\Compilation.js:177:7) 在 C:\Source\ng-example-app\foo\node_modules\webpack\lib\Compilation.js:317:12 在 C:\Source\ng-example-app\foo\node_modules\webpack\lib\Compilation.js:124:4 在 Array.forEach (本机) 在回调(C:\Source\ng-example-app\foo\node_modules\webpack\lib\Compilation.js:123:12) 在 C:\Source\ng-example-app\foo\node_modules\webpack\lib\Compilation.js:147:10 在 C:\Source\ng-example-app\foo\node_modules\webpack\lib\NormalModule.js:209:10 在 C:\Source\ng-example-app\foo\node_modules\webpack\lib\NormalModule.js:164:10 在 C:\Source\ng-example-app\foo\node_modules\loader-runner\lib\LoaderRunner.js:365:3 在 iterateNormalLoaders (C:\Source\ng-example-app\foo\node_modules\loader-runner\lib\LoaderRunner.js:206:10) 在 iterateNormalLoaders (C:\Source\ng-example-app\foo\node_modules\loader-runner\lib\LoaderRunner.js:213:10) 在 C:\Source\ng-example-app\foo\node_modules\loader-runner\lib\LoaderRunner.js:228:3 在 runSyncOrAsync (C:\Source\ng-example-app\foo\node_modules\loader-runner\lib\LoaderRunner.js:125:11) 在 iterateNormalLoaders (C:\Source\ng-example-app\foo\node_modules\loader-runner\lib\LoaderRunner.js:224:2) 在 iterateNormalLoaders (C:\Source\ng-example-app\foo\node_modules\loader-runner\lib\LoaderRunner.js:213:10) 在 C:\Source\ng-example-app\foo\node_modules\loader-runner\lib\LoaderRunner.js:228:3 在 context.callback (C:\Source\ng-example-app\foo\node_modules\loader-runner\lib\LoaderRunner.js:106:13) 在 C:\Source\ng-example-app\foo\node_modules\postcss-loader\index.js:67:13 在 process._tickCallback (internal/process/next_tick.js:103:7)
【问题讨论】:
-
有完全相同的问题。我已经尝试了几乎所有我能想到的方法来尝试加载 Typemoq 模块,但缺乏文档和糟糕的错误消息使得这很难弄清楚。
-
我从来没想过,如果你使用this sort of configuration,我只将我的测试切换到 gulp/browserify
-
我对此进行了更多调查,发现问题是由于源映射加载器与 Typemoq.js 末尾定义的内联源映射存在问题引起的。如果只有 angular-cli 允许您覆盖 webpack 配置,那么不加载 Typemoq 源映射将非常容易。如果我破解我的 node_modules 中的 webpack 配置,我就能让它工作,但这显然不是一个可行的解决方案。
标签: javascript angular typescript angular-cli