节点回调args无法断言instanceof Error

时间:2015-03-24 13:44:08

标签: javascript node.js mocha

我正在为oauth创建一些简单的函数,其中一个验证了其选项哈希中有scoperedirectUriclientId。另外,如果这些不存在,那么它应该返回callback(new Error(...))

function(opts, callback) {
  var scope = opts.scope;
  var clientId = opts.clientId;
  var redirectUri = opts.redirectUri;

  if (!scope) {
    return callback(new Error('No scope provided'));
  }

  ...
}

在我的测试中,我通过断言如果没有提供作用域来测试它,它应该返回Error类型的内容并且错误应该与该描述匹配:

it('should require a scope', function() {
  var callback = sinon.spy();
  myOauthFunction({}, callback);

  callback.args[0].should.be.an.Error;
  callback.args[0].toString().should.eql('Error: No scope provided');
});

但是,当我运行测试时,我收到此错误:

AssertionError: expected [ [Error: No scope provided] ] to be an error。第二个断言不会导致问题,这意味着参数具有toString属性,但不属于Error类型。我有点困惑 - 为什么它不能断言它是Error

1 个答案:

答案 0 :(得分:1)

正如您可能在输出消息中看到的那样args[0]实际上是一个数组。 args[0]引用第一次调用的参数args[1]到第二次调用的参数等。

如果要检查第一个呼叫的第一个参数,则必须执行

callback.args[0][0].should.be.an.Error;

callback.getCall(0).args[0].should.be.an.Error;

documentation中的更多信息。