Mocha 测试无法在 Nodejs 服务器上运行 [重复]

2024-05-05

客观的

找出当断言失败时我的测试崩溃的原因。

背景

我有一个非常简单的 NodeJs 应用程序,我正在使用Mocha https://www.npmjs.com/package/mocha for BDD https://en.wikipedia.org/wiki/Behavior-driven_development没有断言框架(只有 NodeJs 的基本断言)。

我使用以下命令运行摩卡测试npm test我有以下 package.json 文件:

{
  "name": "server",
  "version": "1.0.0",
  "description": "Mah Project!",
  "main": "index.js",
  "scripts": {
    "test": "mocha test.js",
    "test-kitten": "mocha -R nyan test.js",
    "watch": "gulp watch",
    "start": "node server.js"
  },
  "repository": {
    "type": "git",
    "url": ""
  },
  "keywords": [
    "awesome"
  ],
  "author": "Rick and Morty",
  "license": "ISC",
  "homepage": "",
  "dependencies": {
    "express": "^4.14.0",
    "mongodb": "^2.2.6",
    "underscore": "^1.8.3"
  },
  "devDependencies": {
    "gulp": "^3.9.1",
    "gulp-mocha": "^3.0.1",
    "mocha": "^3.0.2",
    "superagent": "^2.2.0"
  }
}

Code

为了尝试 Mocha,我创建了一个非常简单的测试:

"use strict";

let assert = require("assert");

describe("server", function(){
    it("prints out 'Hello, world'", function(){
        assert.equal('A', 'B');
    });
});

Problem

当我有assert.equal('A', 'A');,测试通过,一切正常。

然而,当我有assert.equal('A', 'B');,测试失败(正如预期的那样),但应用程序也崩溃了!

根据我正在遵循的教程,这不应该崩溃:

  • https://youtu.be/MrZ-XwDGPto?t=146 https://youtu.be/MrZ-XwDGPto?t=146

它还创建一个调试文件:

0 info it worked if it ends with ok
1 verbose cli [ '/home/ubuntu/.nvm/versions/node/v4.4.5/bin/node',
1 verbose cli   '/home/ubuntu/.nvm/versions/node/v4.4.5/bin/npm',
1 verbose cli   'run',
1 verbose cli   'test' ]
2 info using [email protected] /cdn-cgi/l/email-protection
3 info using [email protected] /cdn-cgi/l/email-protection
4 verbose run-script [ 'pretest', 'test', 'posttest' ]
5 info pretest [email protected] /cdn-cgi/l/email-protection
6 info test [email protected] /cdn-cgi/l/email-protection
7 verbose unsafe-perm in lifecycle true
8 info [email protected] /cdn-cgi/l/email-protection Failed to exec test script
9 verbose stack Error: [email protected] /cdn-cgi/l/email-protection test: `mocha test.js`
9 verbose stack Exit status 1
9 verbose stack     at EventEmitter.<anonymous> (/home/ubuntu/.nvm/versions/node/v4.4.5/lib/node_modules/npm/lib/utils/lifecycle.js:217:16)
9 verbose stack     at emitTwo (events.js:87:13)
9 verbose stack     at EventEmitter.emit (events.js:172:7)
9 verbose stack     at ChildProcess.<anonymous> (/home/ubuntu/.nvm/versions/node/v4.4.5/lib/node_modules/npm/lib/utils/spawn.js:24:14)
9 verbose stack     at emitTwo (events.js:87:13)
9 verbose stack     at ChildProcess.emit (events.js:172:7)
9 verbose stack     at maybeClose (internal/child_process.js:827:16)
9 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:211:5)
10 verbose pkgid [email protected] /cdn-cgi/l/email-protection
11 verbose cwd /home/ubuntu/workspace/server
12 error Linux 4.2.0-c9
13 error argv "/home/ubuntu/.nvm/versions/node/v4.4.5/bin/node" "/home/ubuntu/.nvm/versions/node/v4.4.5/bin/npm" "run" "test"
14 error node v4.4.5
15 error npm  v2.15.5
16 error code ELIFECYCLE
17 error [email protected] /cdn-cgi/l/email-protection test: `mocha test.js`
17 error Exit status 1
18 error Failed at the [email protected] /cdn-cgi/l/email-protection test script 'mocha test.js'.
18 error This is most likely a problem with the server package,
18 error not with npm itself.
18 error Tell the author that this fails on your system:
18 error     mocha test.js
18 error You can get information on how to open an issue for this project with:
18 error     npm bugs server
18 error Or if that isn't available, you can get their info via:
18 error
18 error     npm owner ls server
18 error There is likely additional logging output above.
19 verbose exit [ 1, true ]

Correction Tentative

我尝试通过这样做来纠正这个问题

"dependencies": {
    "express": "^4.14.0",
    "mongodb": "^2.2.6",
    "underscore": "^1.8.3",
    "gulp": "^3.9.1",
    "gulp-mocha": "^3.0.1",
    "mocha": "^3.0.2",
    "superagent": "^2.2.0"
}

并完全去除devDependencies我的 package.json 中的对象,但这不是真正的解决方案,只是解决问题的一个微不足道的解决方法。如果我有仅用于开发环境的软件包和工具,我应该能够单独使用和安装它们!


TL;DR

这在某种程度上是预期的行为npm run.

解释

经过长时间的搜索,我发现了一个威胁,引导我走上正确的道路:

  • 运行测试时出现 npm 错误 ELIFECYCLE https://stackoverflow.com/questions/23286017/npm-error-elifecycle-while-running-the-test

这里发生的是 mocha 返回失败测试的数量。因此,如果所有测试都通过,mocha 将返回 0,并且 npm 会继续执行而不会引发异常。

但是,如果 X 测试失败,mocha 将返回 X。由于运行脚本返回的结果不是 0,npm 将抛出代码为 X 的异常,并且执行失败。

Venting

就个人而言,这种行为很糟糕。我不知道这里该怪谁,如果 mocha 在任意数量的测试失败时返回任意数字,是 npm 拒绝 0 以外的任何东西,还是我,因为显然不知道如何运行测试,或者至少保留掌握这样做的技术......

现在我需要继续找到一种使用 mocha 和 npm 运行测试的好方法。希望这对某人有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mocha 测试无法在 Nodejs 服务器上运行 [重复] 的相关文章

随机推荐

  • 1 MB 或更多的 Java 字节数组占用 RAM 的两倍

    在 Windows 10 OpenJDK 11 0 4 x64 上运行以下代码会生成输出used 197 and expected usage 200 这意味着包含 100 万个元素的 200 个字节数组大约占用 200 个字节 200MB
  • 无法隐藏 QMenu 对象 QMenu::setVisible()?

    我已经建立了一个QMenu MainMenu在我的上面MainWindow在我的应用程序中 大家都习惯了 我有以下QMenu主菜单 文件 编辑 SuperHeavyExpertMenus 设置 帮助 我想隐藏子树SuperHeaverExp
  • 查找字符串中缺少的大括号 javascript

    我已经编写了逻辑来检查 和 的括号 但是当括号混合时似乎会出现问题 这是因为我只是比较括号总数 这是我写的 function checkParanthesis str var depth 0 for var i in str if str
  • 如何在 Spring Boot 中从 resolurces 文件中读取文件夹,:从 Jar 运行时出现错误

    我正在尝试下面的代码 我在其中读取文件并从资源文件夹执行 File fileList new File getClass getResource jsonData toURI listFiles for File file fileList
  • 生成 xcframework 库时 xcodebuild 错误“不支持具有多个平台的二进制文件”

    我正在尝试从 MyFramework framework 文件生成 xcframework 文件 我正在运行以下命令 xcodebuild create xcframework framework MyFramework framework
  • R中的神经网络包出现大错误

    我正在尝试弄清楚如何使神经网络包发挥作用 我用我创建的数据及其结果 大约 50 行数据和三列 第四列是我想要的结果 它是通过简单的数学执行 如对其他三列求和 得出的 进行了一些测试 到目前为止一切顺利 然后我决定将这个包应用到真实数据上 我
  • 是否存在应明确跟踪或忽略的事件?

    在做研究解决问题的同时如何在处理程序之后自动重新引发异常 https stackoverflow com q 56084252 216356 开发了一个异常类 具有在处理后自动再次抛出自身的能力 受到ThreadAbortException
  • 为什么 SO 使用 schema.org Article 而不是 AskAction?

    实际上 我对一个门户网站的 schema org 实施进行了研究 该门户网站有类似问题和答案的内容 但现在我看到 stackoverflow 正在使用 http schema org Article如有疑问 代替 http schema o
  • next.js 环境变量未定义(Next.js 10.0.5)

    我正在使用 Next js 编写一个网站 并尝试添加谷歌标签管理器 我按照 Next js Github 示例上的教程进行操作 但由于某些原因我无法访问我的环境变量 它说我的变量未定义 我在项目文件夹中创建了一个文件 env local 与
  • 如何将LUT png用于CIColorCube滤镜?

    我想使用查找表 png example http nghiatran me wp content uploads 2014 06 FilterMe Part2 ProcessedLUT png 作为颜色立方体数据CIColorCubeSwi
  • 获取 SecureString 作为纯文本参数

    我正在尝试将 SecureString 作为纯文本参数获取到命令行 PowerShell 我知道安全字符串的形式是什么 例如 字符串 abc 将是安全字符串 71289371289 然后 我想将 71289371289 作为参数传递给脚本
  • 如何垂直对齐div内的图像

    如何在包含的内容中对齐图像div Example 在我的示例中 我需要将 img in the div with class frame div class frame style height 25px img src http jsfi
  • 整数构造变体

    大家好 我遇到了一个有趣的事件 正在寻找解释 在 Java 1 6 中 Integer a new Integer 5 Integer b new Integer 5 System out println a b Integer c 5 I
  • 第301章

    Problem 访客打开网址website com i 133r534 213213 12312312但此网址不再有效 需要将其转发到website com 视频 133r534 213213 12312312 我尝试过的 在过去的几个小时
  • 如何提高 MongoDB 中 update() 和 save() 的性能?

    我正在寻找有关如何在以下情况下提高数据库性能的提示 作为示例应用程序 我今天编写了一个相当简单的应用程序 它使用 Twitter 流 API 来搜索某些关键字 然后将结果存储在 MongoDB 中 该应用程序是用 Node js 编写的 我
  • 带尖括号 (<>) 的方法

    方法名称中是否可以有尖括号 例如 class Foo ind1 Int ind2 Int var v new Foo 1 2 v 1 3 updates ind1 v lt 1 gt 4 updates ind2 真实情况显然比这更复杂 我
  • 如何随机获得Material Design Color?

    谷歌有他们的颜色 指南 http www google com design spec style color html 那么如何随机接收一个颜色呢 有没有办法指定表中的数字并从表的所有颜色中接收随机颜色 例如getMatColor 100
  • 使用 org.apache.cordova.file 获取选定的文件大小

    使用 org apache cordova file 插件 我可以选择该文件并获取该文件的本机路径 之后 我必须限制用户根据文件大小选择文件 但我无法理解文件大小 我的问题是我无法使用该插件获取文件大小 为此我正在使用本教程 http th
  • jQuery - 单击 LI,显示/隐藏 UL - 单击 LI:a href,继续显示 UL 并在空白窗口中打开

    感谢 SO 的出色贡献者 当您开始了解 jQuery 时 它会变得更酷 所以我有一个 LI 单击时会显示 隐藏子 UL 我想做的是能够单击 LI 内的链接 打开一个空白窗口 但也不会关闭子 UL 空白窗口打开完成 a href http a
  • Mocha 测试无法在 Nodejs 服务器上运行 [重复]

    这个问题在这里已经有答案了 客观的 找出当断言失败时我的测试崩溃的原因 背景 我有一个非常简单的 NodeJs 应用程序 我正在使用Mocha https www npmjs com package mocha for BDD https