Angular2单元测试。   Npm test'仅成功运行一次,再也不会

时间:2016-09-19 00:16:07

标签: unit-testing angular karma-runner

我正按照此处的说明尝试为我的Angular2项目设置单元测试:https://angular.io/docs/ts/latest/testing/#!#setup 第一次使用这个项目我运行npm test一切正常。我按ctrl-c停止测试会话。下次执行npm test而没有对项目进行任何更改时,它会失败,并显示以下错误:

[1] Chrome 53.0.2785 (Windows 10 0.0.0) LOG: Error{originalErr: Error{}}
[1]
    Chrome 53.0.2785 (Windows 10 0.0.0): Executed 0 of 4 SUCCESS (0 secs / 0 secs)
[1] Missing error handler on `socket`.
[1] TypeError: Cannot set property '49007121' of null
[1]     at createHtmlResults (C:\Projects\Tmp\ng-karma-test\node_modules\karma-htmlfile-reporter\index.js:57:32)
[1]     at initializeHtmlForBrowser (C:\Projects\Tmp\ng-karma-test\node_modules\karma-htmlfile-reporter\index.js:78:5)
[1]     at HTMLReporter.onBrowserStart (C:\Projects\Tmp\ng-karma-test\node_modules\karma-htmlfile-reporter\index.js:91:5)
[1]     at Server.<anonymous> (C:\Projects\Tmp\ng-karma-test\node_modules\karma\lib\events.js:13:22)
[1]     at emitTwo (events.js:111:20)
[1]     at Server.emit (events.js:191:7)
[1]     at Browser.onStart (C:\Projects\Tmp\ng-karma-test\node_modules\karma\lib\browser.js:126:13)
[1]     at Socket.<anonymous> (C:\Projects\Tmp\ng-karma-test\node_modules\karma\lib\events.js:13:22)
[1]     at emitOne (events.js:101:20)
[1]     at Socket.emit (events.js:188:7)
[1]     at Socket.onevent (C:\Projects\Tmp\ng-karma-test\node_modules\socket.io\lib\socket.js:335:8)
[1]     at Socket.onpacket (C:\Projects\Tmp\ng-karma-test\node_modules\socket.io\lib\socket.js:295:12)
[1]     at Client.ondecoded (C:\Projects\Tmp\ng-karma-test\node_modules\socket.io\lib\client.js:193:14)
[1]     at Decoder.Emitter.emit (C:\Projects\Tmp\ng-karma-test\node_modules\component-emitter\index.js:134:20)
[1]     at Decoder.add (C:\Projects\Tmp\ng-karma-test\node_modules\socket.io-parser\index.js:247:12)
[1]     at Client.ondata (C:\Projects\Tmp\ng-karma-test\node_modules\socket.io\lib\client.js:175:18)
    Chrome 53.0.2785 (Windows 10 0.0.0) ERROR
[1]   Disconnectedundefined
    Chrome 53.0.2785 (Windows 10 0.0.0): Executed 0 of 4 DISCONNECTED (5.004 secs / 0 secs)
[1] 18 09 2016 18:34:21.946:ERROR [karma]: TypeError: Cannot read property '49007121' of null
[1]     at HTMLReporter.onBrowserComplete (C:\Projects\Tmp\ng-karma-test\node_modules\karma-htmlfile-reporter\index.js:95:23)
[1]     at Server.<anonymous> (C:\Projects\Tmp\ng-karma-test\node_modules\karma\lib\events.js:13:22)
[1]     at emitOne (events.js:101:20)
[1]     at Server.emit (events.js:188:7)
[1]     at Timeout._onTimeout (C:\Projects\Tmp\ng-karma-test\node_modules\karma\lib\browser.js:166:17)
[1]     at tryOnTimeout (timers.js:232:11)
[1]     at Timer.listOnTimeout (timers.js:202:5)
[1] karma start karma.conf.js exited with code 1

引号中的数字每次都不同。如果我重启我的电脑,单元测试会再次运行,但也只会再次运行一次,而不是再次出现相同的错误。

感谢。

PS :将所有软件包引入最新版本会出现以下错误: node_modules/@types/jasmine/index.d.ts(73,9):错误TS2375:重复的数字索引签名。 node_modules/@types/jasmine/index.d.ts(127,9):错误TS2374:重复的字符串索引签名。 node_modules/@types/node/index.d.ts(99,9):错误TS2300:重复的标识符&#39; BufferEncoding&#39;。 node_modules/@types/node/index.d.ts(544,26):错误TS2300:重复的标识符&#39;缓冲区&#39;。 node_modules/@types/node/index.d.ts(544,50):错误TS2300:重复的标识符&#39; SlowBuffer&#39;。 node_modules/@types/node/index.d.ts(565,18):错误TS2300:重复的标识符&#39; EventEmitter&#39;。 node_modules/@types/node/index.d.ts(724,18):错误TS2300:重复的标识符&#39;代理&#39;。 node_modules/@types/node/index.d.ts(769,18):错误TS2300:重复的标识符&#39; Worker&#39;。 node_modules/@types/node/index.d.ts(1070,18):错误TS2300:重复的标识符&#39;脚本&#39;。 node_modules/@types/node/index.d.ts(1912,18):错误TS2300:重复的标识符&#39; TLSSocket&#39;。 node_modules/@types/node/index.d.ts(2203,18):错误TS2300:重复的标识符&#39;流&#39;。 node_modules/@types/node/index.d.ts(2214,18):错误TS2300:重复的标识符&#39;可读&#39;。 node_modules/@types/node/index.d.ts(2237,18):错误TS2300:重复的标识符&#39;可写&#39;。 node_modules/@types/node/index.d.ts(2255,18):错误TS2300:重复的标识符&#39; Duplex&#39;。 node_modules/@types/node/index.d.ts(2276,18):错误TS2300:重复的标识符&#39;转换&#39;。 node_modules/@types/node/index.d.ts(2298,18):错误TS2300:重复的标识符&#39; PassThrough&#39;。 node_modules/@types/node/index.d.ts(2369,5):错误TS2300:重复的标识符&#39; export =&#39;。 node_modules/@types/node/index.d.ts(2391,18):错误TS2300:重复的标识符&#39;域&#39;。 typings / globals / node / index.d.ts(78,6):错误TS2300:重复的标识符&#39; BufferEncoding&#39;。 typings / globals / node / index.d.ts(516,9):错误TS2502:&#39; BuffType&#39;在其自己的类型注释中直接或间接引用。 typings / globals / node / index.d.ts(517,9):错误TS2502:&#39; SlowBuffType&#39;在其自己的类型注释中直接或间接引用。 typings / globals / node / index.d.ts(518,26):error TS2300:Duplicate identifier&#39; Buffer&#39;。 typings / globals / node / index.d.ts(518,50):错误TS2300:重复标识符&#39; SlowBuffer&#39;。 typings / globals / node / index.d.ts(539,18):错误TS2300:重复的标识符&#39; EventEmitter&#39;。 typings / globals / node / index.d.ts(698,18):error TS2300:Duplicate identifier&#39; Agent&#39;。 typings / globals / node / index.d.ts(743,18):error TS2300:Duplicate identifier&#39; Worker&#39;。 typings / globals / node / index.d.ts(1044,18):错误TS2300:重复的标识符&#39;脚本&#39;。 typings / globals / node / index.d.ts(1886,18):错误TS2300:重复的标识符&#39; TLSSocket&#39;。 typings / globals / node / index.d.ts(2177,18):错误TS2300:重复的标识符&#39;流&#39;。 typings / globals / node / index.d.ts(2188,18):错误TS2300:重复的标识符&#39;可读&#39;。 typings / globals / node / index.d.ts(2211,18):错误TS2300:重复的标识符&#39;可写&#39;。 typings / globals / node / index.d.ts(2229,18):错误TS2300:重复的标识符&#39; Duplex&#39;。 typings / globals / node / index.d.ts(2250,18):错误TS2300:重复的标识符&#39;转换&#39;。 typings / globals / node / index.d.ts(2272,18):错误TS2300:重复的标识符&#39; PassThrough&#39;。 typings / globals / node / index.d.ts(2343,5):错误TS2300:重复的标识符&#39; export =&#39;。 typings / globals / node / index.d.ts(2365,18):错误TS2300:重复的标识符&#39;域&#39;。 错误的ERR!测试失败。有关详细信息,请参见上文。

2 个答案:

答案 0 :(得分:1)

我今天一直在面对这个问题。它似乎发生在需要修复的潜在错误时。到目前为止,我还无法修复错误,因此这可能无法完全解决您的问题。

如果您在 karma.conf.js 文件中添加/更改这些设置,您应该能够在测试运行时看到导致错误的原因:

config.set({
    ...
    autoWatch: false,
    singleRun: true
});

这也应该可以防止因错误发生时业力退出。

答案 1 :(得分:0)

设置问题,您需要添加,例如:

autoWatchBatchDelay: 1000

在karma.conf.js

  

<强> autoWatchBatchDelay:   
  类型:数字   
  默认值:250   
  描述的:   
  当Karma正在观察文件的更改时,它会尝试将多个更改批处理为一次运行,以便测试运行器不会尝试启动并重新启动运行测试。配置设置告诉Karma在再次开始测试过程之前发生任何更改后等待多长时间(以毫秒为单位)。

此致