Mocha 测试在 nodejs 服务器上失败 运行
Mocha test failing to run on nodejs server
Objective
找出为什么我的测试在断言失败时崩溃。
背景
我有一个非常简单的 NodeJs 应用程序,我使用 Mocha for BDD 没有断言框架(只有来自 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"
}
}
代码
为了尝试 Mocha,我创建了一个非常简单的测试:
"use strict";
let assert = require("assert");
describe("server", function(){
it("prints out 'Hello, world'", function(){
assert.equal('A', 'B');
});
});
问题
当我有assert.equal('A', 'A');
时,测试通过,一切正常。
但是,当我有 assert.equal('A', 'B');
时,测试失败(正如预期的那样)但应用程序也崩溃了!
根据我正在学习的教程,这应该不会崩溃:
它还会创建一个调试文件:
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
对象,但这不是真正的解决方案,只是解决问题的微不足道的解决方法。如果我有仅用于开发环境的包和工具,我应该能够单独使用和安装它们!
经过之前的试探,问题依然存在
问题
- 为什么断言失败时我的代码会崩溃?
TL;DR
这在某种程度上是 npm run
的预期行为。
说明
经过长时间的搜索,我发现了一个让我走上正确道路的威胁:
- npm error ELIFECYCLE while running the test
这里发生的是 mocha returns 失败测试的数量。因此,如果所有测试都通过,mocha returns 0 和 npm 将继续而不会抛出异常。
但是,如果 X 测试失败,mocha 将 return X。因为 returned 来自 运行 脚本的结果不同于 0,npm 将抛出异常代码 X,将无法执行。
通风
就我个人而言,这种行为很糟糕。我不知道该怪谁,如果 mocha 在任意数量的测试失败时 returning 任意数字,是 npm 拒绝除 0 以外的任何内容,还是我,因为显然不知道如何 运行 测试,或者至少跟上技术的发展....
现在我需要继续寻找使用 mocha 和 npm 进行 运行 测试的合适方法。希望这对某人有所帮助。
Objective
找出为什么我的测试在断言失败时崩溃。
背景
我有一个非常简单的 NodeJs 应用程序,我使用 Mocha for BDD 没有断言框架(只有来自 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"
}
}
代码
为了尝试 Mocha,我创建了一个非常简单的测试:
"use strict";
let assert = require("assert");
describe("server", function(){
it("prints out 'Hello, world'", function(){
assert.equal('A', 'B');
});
});
问题
当我有assert.equal('A', 'A');
时,测试通过,一切正常。
但是,当我有 assert.equal('A', 'B');
时,测试失败(正如预期的那样)但应用程序也崩溃了!
根据我正在学习的教程,这应该不会崩溃:
它还会创建一个调试文件:
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
对象,但这不是真正的解决方案,只是解决问题的微不足道的解决方法。如果我有仅用于开发环境的包和工具,我应该能够单独使用和安装它们!
经过之前的试探,问题依然存在
问题
- 为什么断言失败时我的代码会崩溃?
TL;DR
这在某种程度上是 npm run
的预期行为。
说明
经过长时间的搜索,我发现了一个让我走上正确道路的威胁:
- npm error ELIFECYCLE while running the test
这里发生的是 mocha returns 失败测试的数量。因此,如果所有测试都通过,mocha returns 0 和 npm 将继续而不会抛出异常。
但是,如果 X 测试失败,mocha 将 return X。因为 returned 来自 运行 脚本的结果不同于 0,npm 将抛出异常代码 X,将无法执行。
通风
就我个人而言,这种行为很糟糕。我不知道该怪谁,如果 mocha 在任意数量的测试失败时 returning 任意数字,是 npm 拒绝除 0 以外的任何内容,还是我,因为显然不知道如何 运行 测试,或者至少跟上技术的发展....
现在我需要继续寻找使用 mocha 和 npm 进行 运行 测试的合适方法。希望这对某人有所帮助。