当摩卡测试失败时,它将一个对象记录到控制台

当摩卡测试失败时,它将一个对象记录到控制台

问题描述:

当我所有的测试通过时,一切都按预期工作。然而,当测试失败,任何记者活跃,亚军打印代表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(); 
    }); 
    }); 

}); 

任何线索,为什么我没有得到美丽的景色?

您使用--ignore-leaks表明您使用的是过时的摩卡版本。 (因为变更为--check-leaks。)

安装最新版本npm install -g mocha

此外,你似乎得到了JSON记者。检查你是否有test/mocha.opts文件,但我不明白为什么它不会被你的命令行参数覆盖。

+0

感谢您的回答,但不幸的是不是解决方案。没有摩卡选择,因为我更喜欢在make文件中使用内联命令。 – srquinn 2013-04-21 12:05:44

由于异步行为,对象被记录到控制台。 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); 
    } 
    }); 
});