我正在为oauth制作一些简单的函数,其中一个函数可以验证其选项哈希中是否有scope
,redirectUri
和clientId
。此外,如果不存在,则应返回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/