为 class 的所有实例存根方法
stubbing a method for all instances of a class
正在尝试对 jwksClient 的方法 getSigningKey
进行存根。但是,它实际上执行了函数的非存根版本并且 return 是一个错误而不是 mockResponse
。如何存根使其 return 而不是 mockResponse
?
const jwksClient = require('jwks-rsa');
sinon.stub(jwksClient(sinon.match.any), 'getSigningKey').callsArgWith(1, null, mockResponse)
const client = auth0authorizer.jwksClient({
cache: true,
cacheMaxEntries: 5, // Default value
cacheMaxAge: ms('10h'), // Default value
jwksUri: jwksUri
});
client.getSigningKey('abc',(err,key) => {
// doesn't stub returns error
})
这段代码看起来比必要的更复杂,尤其是 Sinon 部分。我假设 auth0authorizer.jwksClient
是您的示例代码中的错字,而您的意思只是 jwksClient
。
如果你想存根实例,你需要存根生成的实例,而不是工厂方法上不存在的方法(你正在做的!)。
那只是意味着
const client = jwksClient({
cache: true,
jwksUri: jwksUri
});
sinon.stub(client, 'getSigningKey').callsArgWith(1, null, mockResponse)
但是如果问题是由于某种原因您无法访问生成的客户端对象,例如它是在您的控制之外生成的,您将不得不存根 jwksClient
的原型。 It looks like 您不能直接导入 JwksClient
class,因为 lib 是由 Babel 转译的,不会导出 class。在这种情况下,您可以使用 Object.getPrototypeOf()
。
首先调用jwksClient
函数,获取返回的虚拟对象。我们只会用它来修改原型:
const proto = Object.getPrototypeOf( jwksClient(options) );
// create stub on the class method
const stub = sinon.stub(proto, 'getSigningKey').callsArgWith(1, null, mockResponse);
// proceed with test as normal
请记住事后恢复存根,否则在以后的测试中可能会出现奇怪的错误:-)
Discloser:我在Sinon团队。
正在尝试对 jwksClient 的方法 getSigningKey
进行存根。但是,它实际上执行了函数的非存根版本并且 return 是一个错误而不是 mockResponse
。如何存根使其 return 而不是 mockResponse
?
const jwksClient = require('jwks-rsa');
sinon.stub(jwksClient(sinon.match.any), 'getSigningKey').callsArgWith(1, null, mockResponse)
const client = auth0authorizer.jwksClient({
cache: true,
cacheMaxEntries: 5, // Default value
cacheMaxAge: ms('10h'), // Default value
jwksUri: jwksUri
});
client.getSigningKey('abc',(err,key) => {
// doesn't stub returns error
})
这段代码看起来比必要的更复杂,尤其是 Sinon 部分。我假设 auth0authorizer.jwksClient
是您的示例代码中的错字,而您的意思只是 jwksClient
。
如果你想存根实例,你需要存根生成的实例,而不是工厂方法上不存在的方法(你正在做的!)。
那只是意味着
const client = jwksClient({
cache: true,
jwksUri: jwksUri
});
sinon.stub(client, 'getSigningKey').callsArgWith(1, null, mockResponse)
但是如果问题是由于某种原因您无法访问生成的客户端对象,例如它是在您的控制之外生成的,您将不得不存根 jwksClient
的原型。 It looks like 您不能直接导入 JwksClient
class,因为 lib 是由 Babel 转译的,不会导出 class。在这种情况下,您可以使用 Object.getPrototypeOf()
。
首先调用jwksClient
函数,获取返回的虚拟对象。我们只会用它来修改原型:
const proto = Object.getPrototypeOf( jwksClient(options) );
// create stub on the class method
const stub = sinon.stub(proto, 'getSigningKey').callsArgWith(1, null, mockResponse);
// proceed with test as normal
请记住事后恢复存根,否则在以后的测试中可能会出现奇怪的错误:-)
Discloser:我在Sinon团队。