Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 柴:如何检查异常属性_Javascript_Node.js_Chai - Fatal编程技术网

Javascript 柴:如何检查异常属性

Javascript 柴:如何检查异常属性,javascript,node.js,chai,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")

考虑下面的一段代码:

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”方法,但它只提供了检查的
实例。首先,您应该抛出
错误的实例或扩展
错误的实例

parse = function() {
  throw new Error('PROTOCOL_ERROR');
}
然后,
chai
有一个方法来断言函数正在抛出错误

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

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之前抛出错误,并有机会捕获它。

我找到了以下答案:

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

您只能断言错误是使用特定构造函数引发的,并且消息是什么。你想检查什么财产?不管什么财产。例如,它可以是sMessage,那么你就无法避免上面使用chai的样板。只是一个警告,如果你用
try{}catch{}
编写它,它不会抛出任何东西,它将被断言并传递,你现在明白问题了:)谢谢你的回答