Typescript 使用Sinon存根作为构造函数的输入创建对象
我正在用打字脚本编写mocha、chai和sinon的单元测试。我需要测试一个类,该类的构造函数需要一个对象作为输入参数,我想模拟它,因为它太复杂了,无法创建。该类的某些方法还使用该特定输入参数对象的属性。所以我还需要模拟那个被模拟对象的方法 也许一些代码可以让它更清楚: 我的课看起来像这样(简化): 这两个属性都不起作用,因为类型Typescript 使用Sinon存根作为构造函数的输入创建对象,typescript,unit-testing,mocha.js,chai,sinon,Typescript,Unit Testing,Mocha.js,Chai,Sinon,我正在用打字脚本编写mocha、chai和sinon的单元测试。我需要测试一个类,该类的构造函数需要一个对象作为输入参数,我想模拟它,因为它太复杂了,无法创建。该类的某些方法还使用该特定输入参数对象的属性。所以我还需要模拟那个被模拟对象的方法 也许一些代码可以让它更清楚: 我的课看起来像这样(简化): 这两个属性都不起作用,因为类型sinonSubbedInstance上不存在属性elasticSearch,并且我无法首先设置elasticSearch属性,因为它只有一个getter 所以现在我
sinonSubbedInstance
上不存在属性elasticSearch
,并且我无法首先设置elasticSearch属性,因为它只有一个getter
所以现在我真的不知道模拟什么以及如何测试getSomething
函数。在最好的情况下,我想说elasticsearch.search(query)
返回一个定义的值,这个特定的值应该在.then部分中进一步处理。我想跳过elasticSearch访问,但仍然希望运行.then部分
所有关于存根和嵌套存根的文档对我都没有帮助。因此我管理了一个有效的解决方案。这可能不是最佳实践,但这是我能做的最好的: 对于上下文对象,我只创建一个空对象,如下所示:
contextMock = <Context><unknown>{
clients: {
elasticSearch: new Client()
}
}
searchStub = sinon.stub(contextMock.clients.elasticSearch, 'search');
然后我可以模拟elasticSearch属性的功能,如下所示:
contextMock = <Context><unknown>{
clients: {
elasticSearch: new Client()
}
}
searchStub = sinon.stub(contextMock.clients.elasticSearch, 'search');
然后我就有了测试这个类所需的所有东西。什么是
ResultObject
?它只是一个为结果定义结构的类。具有消息、错误和成功属性。这可能与这个问题无关。
searchStub = sinon.stub(contextMock.clients.elasticSearch, 'search');