我正在为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

最佳答案

您可能会在输出消息中看到args[0]实际上是一个数组。 args[0]引用第一个调用的参数,args[1]引用第二个调用的参数,依此类推。

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

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


要么

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


documentation中的更多信息。

关于javascript - Node 回调参数无法断言instanceof错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29234256/

10-09 19:33
查看更多