【问题标题】:npm posttest doesn't trigger if npm test fails如果 npm 测试失败,npm posttest 不会触发
【发布时间】:2014-10-07 04:16:02
【问题描述】:

有没有办法在测试失败时触发 npm 的 posttest?如果 package.json 包含

"scripts": {
  "pretest": "echo pretest",
  "test": "some_failed_test_or_error",
  "posttest": "echo posttest"
}

$ npm test 将回显“pretest”,但不会回显“posttest”。

如果我使用 mocha 并且测试失败,我会得到相同的行为,即使 mocha 没有触发任何异常(只是一些简单的失败 assert(true==false))。

我正在预测试中启动一个资源,并且我想在后测中终止该资源,无论测试本身是否通过。

MacOS OS X 10.9.4,npm 版本 1.4.21,节点 v0.10.30。

【问题讨论】:

    标签: node.js testing npm


    【解决方案1】:

    这个问题的另一个答案简洁而简短,但有点不正统。我知道如果我使用它,每次我回来看到“||:”时,我的头上都会出现一个大大的问号。它是如此简洁,你甚至可能会错过它。它需要某个地方的文档。

    我花了一点时间寻找更正统的解决方案,并在这里找到了它:https://github.com/npm/npm/issues/5493

    你需要npm-run-all

    "test": "npm-run-all the-actual-test run-after-test-even-if-failed --continue-on-error"
    

    但是,您不能为 pre 和 post 脚本使用“pretest”或“posttest”名称,因为它们会运行两次。

    【讨论】:

      【解决方案2】:

      解决了。不确定以下是否适用于 Windows。 bash || 运算符后跟一个空注释 : 会更改退出代码。

      例如,使用摩卡:

      "scripts": {
        "pretest": "echo pretest",
        "test": "mocha || :",
        "posttest": "echo posttest"
      }
      

      【讨论】:

      • 这帮助了我,但它在 Windows 上不起作用。我使用mocha || true 让这个跨平台工作。
      • 但是如何保持构建状态?当 mocha 失败时,您可能希望看到构建失败。 mocha || true 隐藏了真正的退出代码,当测试失败时你不会看到。
      • 是的!这个简单的解决方案有效,我也看到了错误
      • 我认为这可能不适用于 CI 构建。我相信他们依靠退出代码来判断测试是否失败。这可能也是 just-boris 所指的。
      猜你喜欢
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      • 2021-05-28
      • 1970-01-01
      相关资源
      最近更新 更多