柴:我怎么检查异常属性

时间:2016-04-21 17:15:45

标签: javascript node.js chai

考虑下面的一段代码:

var expect = require('chai').expect;

parse = function() {
  throw {error: 'PROTOCOL_ERROR'}
}

describe('parser', function() {

  it('throw error on unfinished command', function() {
    try {
      parse("*2\r\n$4\r\necho\r\n$11\r\nhel")
    } catch (e) {
      expect(e).to.equal({error: 'PROTOCOL_ERROR'})
    }
  })
});

有没有办法在代码中避免这个try...catch样板? Chai有'throw'方法,但它只提供instanceof检查

2 个答案:

答案 0 :(得分:1)

我找到了这个答案:

var expect = require('chai').expect;

parse = function() {
  throw {error: 'PROTOCOL_ERROR'}
}

describe('parser', function() {
  it('throw error on unfinished command', function() {
      expect(
        () => parse("*2\r\n$4\r\necho\r\n$11\r\nhel")
      ).to.throw().which.has.property('error', 'PROTOCOL_ERROR');
  })
});

答案 1 :(得分:0)

首先,您应该抛出Error的实例或扩展Error

的内容
parse = function() {
  throw new Error('PROTOCOL_ERROR');
}

然后chai有一个断言函数抛出错误的方法 http://chaijs.com/api/bdd/#method_throw

所以最后的事情应该是这样的:

var expect = require('chai').expect;

parse = function() {
  throw new Error('PROTOCOL_ERROR');
}

describe('parser', function() {

  it('throw error on unfinished command', function() {

    expect(function() { parse("*2\r\n$4\r\necho\r\n$11\r\nhel") }).to.throw(Error, 'PROTOCOL_ERROR');

  })
});

编辑:包含函数调用函数。否则,在调用expect之前会抛出错误并且有机会捕获它。