我有一段代码,我在其中调用了ElasticSearch指数统计。尝试模仿它以下的方式,但没有工作。
esIndicesStatsStub = sinon.stub(Client.indices.prototype, 'stats').returns({
promise: () => new Error()
})
我得到的错误是TypeError: Cannot read property 'prototype' of undefined
我有这样的源代码
const { Client } = require('@elastic/elasticsearch')
const esClient = new Client({
node:'some https url'
})
esClient.indices.stats(params, function (err, data) {
if (err) {
reject(err);
} else {
if (data) {
//do something
}
//do some other thing
}
});
我如何用sinon
正确模拟elasticsearch?因为我不被允许使用@elastic/elasticsearch-mock
1条答案
按热度按时间wwtsj6pe1#
由于ES SDK通过
getter
函数定义了一些API,如indices
:参见v8.5.0/源代码/应用程序接口/索引。ts#L372
我们应该使用
stub.get(getterFn)
API来替换这个存根的新getter。对于直接分配给
API.prototype
的.bulk
、.clearScroll
等API,您可以调用sinon.stub(Client.prototype, 'bulk')
来存根它们。最后,由于您的代码是在模块作用域中定义的,所以当您
import
/require
它时,代码将被执行。我们应该首先安排我们的存根,然后import
/require
模块。正如您所看到的,我使用动态import()
。例如
index.ts
:index.test.ts
:试验结果:
软件包版本: