“vue-cli-service test:unit” 运行成功;但 npm 退出错误代码 1 ELIFECYCLE

Posted

技术标签:

【中文标题】“vue-cli-service test:unit” 运行成功;但 npm 退出错误代码 1 ELIFECYCLE【英文标题】:"vue-cli-service test:unit " runs succesfully; but npm exits err code 1 ELIFECYCLE 【发布时间】:2020-07-08 13:27:58 【问题描述】:

我正在尝试运行 npm run test:unit,真正的错误似乎是来自 npm debug.log 的 test:unit: Failed to exec test:unit script。然而该脚本确实可以毫无问题地运行和执行。

我对 NPM + Node 有点陌生,所以我正在努力应对这种行为。当我运行npm run test:unit(Package.json 中的"test:unit": "vue-cli-service test:unit")我得到这个输出:

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   1 file obsolete, 0 total
Time:        1.208s
Ran all test suites.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! cheatsheet@0.1.0 test:unit: `vue-cli-service test:unit`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the cheatsheet@0.1.0 test:unit script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/max/.npm/_logs/2020-03-26T18_16_36_155Z-debug.log

预期结果 测试应该刚刚通过,我不应该看到 NPM/Node 崩溃。

运行 ./node_modules/.bin/vue-cli-service test:unit 我只得到测试和 Jest 输出。一切都按预期工作。那么我的设置出了什么问题?

尝试解决方法

重新安装 node_modules 更新了 npm 更新到节点:稳定 重新安装 nvm(节点版本管理器)并更新 尝试向 vue-cli-service 添加额外的调试标志
npm_debug.log
0 info it worked if it ends with ok
1 verbose cli [
1 verbose cli   '/home/max/.nvm/versions/node/v13.11.0/bin/node',
1 verbose cli   '/home/max/.nvm/versions/node/v13.11.0/bin/npm',
1 verbose cli   'run',
1 verbose cli   'test:unit'
1 verbose cli ]
2 info using npm@6.14.4
3 info using node@v13.11.0
4 verbose run-script [ 'pretest:unit', 'test:unit', 'posttest:unit' ]
5 info lifecycle cheatsheet@0.1.0~pretest:unit: cheatsheet@0.1.0
6 info lifecycle cheatsheet@0.1.0~test:unit: cheatsheet@0.1.0
7 verbose lifecycle cheatsheet@0.1.0~test:unit: unsafe-perm in lifecycle true
8 verbose lifecycle cheatsheet@0.1.0~test:unit: PATH: /home/max/.nvm/versions/node/v13.11.0/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/max/cheatsheet_project/cheatsheet/node_modules/.bin:/home/max/.pyenv/plugins/pyenv-virtualenv/shims:/home/max/.pyenv/shims:~/.pyenv/bin:/home/max/Maven/apache-maven-3.5.2/bin:/home/max/.nvm/versions/node/v13.11.0/bin:/home/max/.rbenv/shims:/home/max/.rbenv/bin:/home/max/workspace/go/bin:/home/max/.cargo/bin:/home/max/.cargo/bin:/home/max/bin:/home/max/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/jvm/java-9-oracle/bin:/usr/lib/jvm/java-9-oracle/db/bin:/usr/lib/jvm/java-9-oracle/bin:/usr/lib/jvm/java-9-oracle/db/bin:/usr/local/go/bin
9 verbose lifecycle cheatsheet@0.1.0~test:unit: CWD: /home/max/cheatsheet_project/cheatsheet
10 silly lifecycle cheatsheet@0.1.0~test:unit: Args: [ '-c', 'vue-cli-service test:unit' ]
11 silly lifecycle cheatsheet@0.1.0~test:unit: Returned: code: 1  signal: null
12 info lifecycle cheatsheet@0.1.0~test:unit: Failed to exec test:unit script
13 verbose stack Error: cheatsheet@0.1.0 test:unit: `vue-cli-service test:unit`
13 verbose stack Exit status 1
13 verbose stack     at EventEmitter.<anonymous> (/home/max/.nvm/versions/node/v13.11.0/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:332:16)
13 verbose stack     at EventEmitter.emit (events.js:315:20)
13 verbose stack     at ChildProcess.<anonymous> (/home/max/.nvm/versions/node/v13.11.0/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
13 verbose stack     at ChildProcess.emit (events.js:315:20)
13 verbose stack     at maybeClose (internal/child_process.js:1026:16)
13 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:286:5)
14 verbose pkgid cheatsheet@0.1.0
15 verbose cwd /home/max/cheatsheet_project/cheatsheet
16 verbose Linux 4.15.0-91-generic
17 verbose argv "/home/max/.nvm/versions/node/v13.11.0/bin/node" "/home/max/.nvm/versions/node/v13.11.0/bin/npm" "run" "test:unit"
18 verbose node v13.11.0
19 verbose npm  v6.14.4
20 error code ELIFECYCLE
21 error errno 1
22 error cheatsheet@0.1.0 test:unit: `vue-cli-service test:unit`
22 error Exit status 1
23 error Failed at the cheatsheet@0.1.0 test:unit script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 1, true ]

【问题讨论】:

完整的日志是怎么说的? npm 错误!可以在以下位置找到此运行的完整日志:npm ERR! /home/max/.npm/_logs/2020-03-26T18_16_36_155Z-debug.log 有时会发生这种情况,因为在技术上完成测试后,一段异步代码引发了错误。所以,你的测试实际上可能失败了,即使它说它通过了。不过需要一个 MRE ***.com/help/minimal-reproducible-example 来确认。 @c0de 添加了 NPM 调试日志。我不知道是否应该查看脚本或 NPM。 Failed to exec test:unit script 听起来好像 npm 脚本根本没有执行。当它发生时。从 node_modules/bin 运行 ./node_modules/.bin/vue-cli-service test:unit 是成功的,没有问题,所以当我将它作为脚本运行时,我对失败感到困惑。 所以显然我必须阅读有关 Jest 的更多信息...我注意到 Snapshots: 1 file obsolete, 0 total 并接受了标准输出的建议并重新运行 jest,如下所示:./node_modules/.bin/vue-cli-service test:unit -u 这似乎已经解决了这个问题。 npm run test:unit 现在按预期运行...如果不进一步查看 Jest + Vue-CLI,无法解释它。 【参考方案1】:

./node_modules/.bin/vue-cli-service test:unit -u 修复了这个问题。这是jest --updatesnapshot 的简写命令。

由于我们刚刚更新了组件以指向不同的地址,因此可以合理地预期该组件的快照会发生变化。我们的快照测试用例失败了,因为我们更新的组件的快照不再与此测试用例的快照工件匹配。

要解决这个问题,我们需要更新我们的快照工件。您可以使用一个标志运行 Jest,告诉它重新生成快照...... - 来自Snapshot Testing。

观察到关于快照的错误:

快照:1 个文件已过时,共 0 个

不确定为什么这会导致 NPM 错误,但 -u 清除了它,我再也没有看到它。

【讨论】:

输出应该向您显示有一个过时的快照,然后是一条有关如何更新的消息。但很高兴你能够修复它!

以上是关于“vue-cli-service test:unit” 运行成功;但 npm 退出错误代码 1 ELIFECYCLE的主要内容,如果未能解决你的问题,请参考以下文章