如何使用sinon和mocha在MySQL查询节点上模拟Promisify调用?
本文介绍了如何使用sinon和mocha在MySQL查询节点上模拟Promisify调用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是我使用MySQL的代码-
这是我的测试-
如何编写查询的FAKE函数?
查询:sinon.stub().with Args({}).alls sFake(Function(...args): 承诺{ 常量虚拟数组=[{userid:‘XYZ’}]; 返回新的Promise(function(resolve){resolve(dummyArray)}); })
这对我不起作用。我怎么才能让它起作用呢?我无法让存根函数在Main函数中解析和返回预期的值。查询只是挂起,并在超时后抛出错误。存根中的";matchingfakes";方法中出现错误。
推荐答案
proxyquire
用于截断模块或包的独立函数导出。由于mysql
是一个对象,您可以通过sinon.stub(obj, 'method')
来存根它的方法。您不需要使用Useproxyquire
包。
即使您使用util.promisify
为NodeJS错误优先回调方法(mysql.query(sql, callback)
,回调签名为function (error, results, ...args): void
)生成Promise版本。您需要使用.callsFake()
为此方法创建模拟实现,并通过调用其回调来触发Promise版本。
并且,您应该在清除环境变量之后import
该函数。因为当您导入./dbops
模块时,模块作用域中的代码将立即执行,此时,环境变量不会被存根。
例如
dbops.ts
:
dbops.test.ts
:
测试结果:
这篇关于如何使用sinon和mocha在MySQL查询节点上模拟Promisify调用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!