Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 使用Sinon存根作为构造函数的输入创建对象_Typescript_Unit Testing_Mocha.js_Chai_Sinon - Fatal编程技术网

Typescript 使用Sinon存根作为构造函数的输入创建对象

Typescript 使用Sinon存根作为构造函数的输入创建对象,typescript,unit-testing,mocha.js,chai,sinon,Typescript,Unit Testing,Mocha.js,Chai,Sinon,我正在用打字脚本编写mocha、chai和sinon的单元测试。我需要测试一个类,该类的构造函数需要一个对象作为输入参数,我想模拟它,因为它太复杂了,无法创建。该类的某些方法还使用该特定输入参数对象的属性。所以我还需要模拟那个被模拟对象的方法 也许一些代码可以让它更清楚: 我的课看起来像这样(简化): 这两个属性都不起作用,因为类型sinonSubbedInstance上不存在属性elasticSearch,并且我无法首先设置elasticSearch属性,因为它只有一个getter 所以现在我

我正在用打字脚本编写mocha、chai和sinon的单元测试。我需要测试一个类,该类的构造函数需要一个对象作为输入参数,我想模拟它,因为它太复杂了,无法创建。该类的某些方法还使用该特定输入参数对象的属性。所以我还需要模拟那个被模拟对象的方法

也许一些代码可以让它更清楚:

我的课看起来像这样(简化):

这两个属性都不起作用,因为类型
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');