当我的所有测试通过时,一切都按预期工作。但是,当测试失败并且任何报告器处于活动状态时,跑步者会打印一个表示strack跟踪的对象,而不是我在屏幕截图中看到的格式错误消息
> mocha --reporter spec --ui bdd --ignore-leaks
Site Routes
GET /sites
✓ should return a 200 OK
✓ should be a JSON response
◦ should be an array: {
"date": "Fri Apr 19 2013 16:09:20 GMT-0400 (EDT)",
"process": {
"pid": 34270,
"uid": 1032026306,
"gid": 116266774,
"cwd": "/Users/squinn/Projects/armada",
"execPath": "/usr/local/Cellar/node/0.10.4/bin/node",
"version": "v0.10.4",
"argv": [
"node",
"/Users/squinn/Projects/armada/node_modules/mocha/bin/_mocha",
"--reporter",
"spec",
"--ui",
"bdd",
"--ignore-leaks"
],
"memoryUsage": {
"rss": 55717888,
"heapTotal": 51000320,
"heapUsed": 22281672
}
},
"os": {
"loadavg": [
1.7001953125,
1.66162109375,
1.58984375
],
"uptime": 374244
},
"trace": [
{
"column": 10,
"file": "/Users/squinn/Projects/armada/node_modules/should/lib/should.js",
"function": "Object.Assertion",
"line": 368,
"method": "Assertion",
"native": false
},
{
"column": 43,
"file": "/Users/squinn/Projects/armada/test/route.sites.js",
"function": "null.callback",
"line": 47,
"method": "callback",
"native": false
},
{
"column": 21,
"file": "/Users/squinn/Projects/armada/node_modules/request/main.js",
"function": "",
"line": 290,
"method": null,
"native": false
},
{
"column": 17,
"file": "events.js",
"function": "EventEmitter.emit",
"line": 95,
"method": "emit",
"native": false
},
{
"column": 54,
"file": "/Users/squinn/Projects/armada/node_modules/request/main.js",
"function": "",
"line": 278,
"method": null,
"native": false
},
{
"column": 20,
"file": "events.js",
"function": "IncomingMessage.EventEmitter.emit",
"line": 117,
"method": "EventEmitter.emit",
"native": false
},
{
"column": 14,
"file": "_stream_readable.js",
"function": null,
"line": 883,
"method": null,
"native": false
},
{
"column": 13,
"file": "node.js",
"function": "process._tickCallback",
"line": 415,
"method": "_tickCallback",
"native": false
}
],
"stack": [
"AssertionError: expected [ { user: 'test',",
" group: 'group',",
" name: 'post-test',",
" domain: 'localhost:9000',",
" _id: '51718b214805d8fe83000003',",
" __v: 0,",
" modules: [],",
" labels: [ 'Test' ] } ] not to be an instance of Array: expected [ { user: 'test',",
" group: 'group',",
" name: 'post-test',",
" domain: 'localhost:9000',",
" _id: '51718b214805d8fe83000003',",
" __v: 0,",
" modules: [],",
" labels: [ 'Test' ] } ] not to be an instance of Array",
" at Object.Assertion (/Users/squinn/Projects/armada/node_modules/should/lib/should.js:368:10)",
" at null.callback (/Users/squinn/Projects/armada/test/route.sites.js:47:43)",
" at null.<anonymous> (/Users/squinn/Projects/armada/node_modules/request/main.js:290:21)",
" at EventEmitter.emit (events.js:95:17)",
" at IncomingMessage.<anonymous> (/Users/squinn/Projects/armada/node_modules/request/main.js:278:54)",
" at IncomingMessage.EventEmitter.emit (events.js:117:20)",
" at _stream_readable.js:883:14",
" at process._tickCallback (node.js:415:13)"
],
"level": "error",
"message": "uncaughtException"
}
npm ERR! Test failed. See above for more details.
npm ERR! not ok code 0
这是测试
describe('GET /sites', function (){
var url = 'http://localhost:' + app.get('api').port + '/sites';
it('should return a 200 OK', function (done){
request(url, function (err, res){
res.should.have.status(200);
done();
});
});
it('should be a JSON response', function (done){
request(url, function (err, res, body){
res.should.be.json;
done();
})
});
it('should be an array', function (done){
request(url, function (err, res, body){
JSON.parse(body).should.not.be.an.instanceOf(Array);
done();
});
});
});
为什么我没有得到漂亮的观点的任何线索?
答案 0 :(得分:1)
由于异步行为,对象将记录到控制台。 should.js
正确抛出错误,但不作为done()
回调的参数。我通过在try / catch语句中包装来修复,因此我可以将错误传递给done()
。
it('should return a 200 OK', function (done){
request(url, function (err, res){
try {
res.should.have.status(200);
}
catch (e){
done(e);
}
});
});
答案 1 :(得分:0)
您对--ignore-leaks
的使用表明您使用的是过时的mocha版本。 (它已经改为--check-leaks
。)
使用npm install -g mocha
安装最新版本。
此外,您似乎正在获得JSON记者。检查您是否有test/mocha.opts
文件,但我看不出为什么它不会被命令行参数覆盖。