3

当我所有的测试都通过时,一切都按预期工作。但是,当任何报告器处于活动状态时测试失败时,跑步者会打印一个代表轨迹轨迹的对象,而不是我在屏幕截图中看到的格式漂亮的错误消息

> 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();
    });
  });

});

关于为什么我没有看到漂亮的景色的任何线索?

4

2 回答 2

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);
    }
  });
});
于 2013-04-21T14:59:45.150 回答
0

您的使用--ignore-leaks表明您使用的是过时版本的摩卡咖啡。(后来改成了--check-leaks。)

使用npm install -g mocha.

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

于 2013-04-21T01:18:01.630 回答