节点回调参数无法断言 instanceof 错误
Node callback args not able to assert instanceof Error
我正在为 oauth 制作一些简单的函数,其中之一验证其选项哈希中是否存在 scope
、redirectUri
和 clientId
。此外,如果这些不存在,那么它应该 return 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'));
}
...
}
在我的测试中,我通过断言如果没有提供范围来测试它,它应该 return 类型 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 中的更多信息。
我正在为 oauth 制作一些简单的函数,其中之一验证其选项哈希中是否存在 scope
、redirectUri
和 clientId
。此外,如果这些不存在,那么它应该 return 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'));
}
...
}
在我的测试中,我通过断言如果没有提供范围来测试它,它应该 return 类型 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 中的更多信息。