Typescript 在类型脚本测试中模拟第三方库(ioredis)
在我的类型脚本测试中,要模仿第三方库,我经历了一段令人惊讶的艰难时光 我正在这个图书馆的基础上建立一个图书馆。它使用ava进行测试 在我的例子中,我试图模拟Typescript 在类型脚本测试中模拟第三方库(ioredis),typescript,mocking,sinon,testdoublejs,Typescript,Mocking,Sinon,Testdoublejs,在我的类型脚本测试中,要模仿第三方库,我经历了一段令人惊讶的艰难时光 我正在这个图书馆的基础上建立一个图书馆。它使用ava进行测试 在我的例子中,我试图模拟ioredis的主类,这样我的测试就不会试图建立真正的数据库连接 我试着用, ,及 在西农,我尝试了以下方法 let redisStub = sinon.stub(IORedis) sinon.assert.called(redisStub.Cluster) 使用testdouble,我尝试了很多东西,包括 td.replace('iore
ioredis
的主类,这样我的测试就不会试图建立真正的数据库连接
我试着用,
,及
在西农,我尝试了以下方法
let redisStub = sinon.stub(IORedis)
sinon.assert.called(redisStub.Cluster)
使用testdouble,我尝试了很多东西,包括
td.replace('ioredis') // #1
td.replace('./homeMadeIoredisWrapperClass') // #2
我试过了
我还尝试了许多其他的变化,比如总是在方法中使用require('ioredis')
我想在这里做些不可能的事吗?我认为对数据库进行存根/模拟是一件非常正常的事情,但我似乎无法理解
也许我的设计有缺陷,也许我试图嘲笑错误的东西?如果您能帮上忙,我们将不胜感激
顺便说一句,我正在尝试创建一个非常简单的ioredis连接包装器。我的代码有一些误解/问题导致了这一点。也许这可以启发其他人在这个问题上绊倒
td.replace
之前使用“everything”(import{MyLibrary}from“MyLibrary”
),这使得replace语句发生在代码需要模块之后。原因在于,示例测试是以回购协议的特定方式设计的。我现在已作出决定td.reset()
在我的一些回调启动之前发生,在许多情况下有效地阻止了replace
工作。在ava中的解决方案,使用test.serial(…
代替test(…
)。是的,测试将运行得较慢,但它们会工作。您可以为每个测试创建单独的文件,以在ava中获得真正的并行运行import ioredis from "ioredis";
sinon.stub(ioredis.prototype, "connect").returns(Promise.resolve());
sinon.stub(ioredis.prototype, "get").returns(Promise.resolve({ data: "hello" }));
import ioredis from "ioredis";
sinon.stub(ioredis.prototype, "connect").returns(Promise.resolve());
sinon.stub(ioredis.prototype, "get").returns(Promise.resolve({ data: "hello" }));