摩卡testing无法在nodejs服务器上运行

目的

找出为什么我的testing崩溃,当我失败的断言。

背景

我有一个非常简单的NodeJs应用程序,我正在使用摩卡 BDD没有断言框架(只是从NodeJs基本断言)。

我运行我的摩卡testing使用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" } } 

为了尝试摩卡,我创build了一个非常简单的testing:

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

问题

当我assert.equal('A', 'A'); ,testing通过,一切都很好。

然而,当我assert.equal('A', 'B'); ,testing失败(应该是这样),但应用程序崩溃!

根据我下面的教程,这不应该崩溃:

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

它还创build一个debugging文件:

 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 npm@2.15.5 3 info using node@v4.4.5 4 verbose run-script [ 'pretest', 'test', 'posttest' ] 5 info pretest server@1.0.0 6 info test server@1.0.0 7 verbose unsafe-perm in lifecycle true 8 info server@1.0.0 Failed to exec test script 9 verbose stack Error: server@1.0.0 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 server@1.0.0 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 server@1.0.0 test: `mocha test.js` 17 error Exit status 1 18 error Failed at the server@1.0.0 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 ] 

更正暂定

我试图通过这个来纠正这个问题

 "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" } 

并从我的package.json中彻底删除devDependencies对象,但这不是一个真正的解决scheme,只是解决问题的一个微不足道的方法。 如果我的软件包和工具只用于开发环境,我应该可以单独使用和安装它们。

问题依然存在,即使在前面的尝试之后。

  • 为什么断言失败时我的代码会崩溃?

TL; DR

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

说明

经过长时间的search,我发现了一个威胁,以正确的方式引导我:

  • 运行testing时npm错误ELIFECYCLE

这里发生的事情是,摩卡返回失败的testing数量。 所以如果所有的testing都通过了,mocha返回0,npm继续而不会抛出exception。

但是,如果Xtesting失败,mocha将返回X.因为运行脚本的返回结果不是0,所以npm会抛出一个代码为X的exception,并且执行失败。

放空

就个人而言,这种行为是废话。 我不知道这里应该怪谁,如果mocha在任意数量的testing失败时返回一个任意数字,就是npm拒绝除0之外的任何东西,或者我明显不知道如何运行testing,或者至less保留与技术做到这一点….

现在我需要继续,并find一个体面的方式来运行使用摩卡和NPMtesting。 希望这可以帮助别人。