gpt4 book ai didi

javascript - 使用 Sinon 在 javascript 中 stub Redis 交互

转载 作者:IT老高 更新时间:2023-10-28 23:16:49 27 4
gpt4 key购买 nike

我在 node.js 中工作。我的应用通过 node_redis 模块与 Redis 交互。我正在使用 mocha 和 sinon 来自动测试我的应用程序。我的应用看起来像这样:

...snip
var redisClient = redis.createClient(redisPort, redisHost);
var someValue = redisClient.get("someKey");
return someValue;
....

我想 stub 对 redisClient.get() 的调用。为此,我还需要对 redis.createClient() 的调用 stub - 我认为...这是我的测试代码:

...
var redis = require("redis");
var redisClient;
...
sinon.stub(redisClient, 'get').returns("someValue");
sinon.stub(redis, "createClient").returns(redisClient);
...
assert.equal(redis_client_underTest.call_to_redis(), "someValue");
...

测试失败并出现 AssertionError: false == "someValue"

我如何 stub redisClient,或者这是否可能?

最佳答案

你可以做的是使用类似 ProxyquireRewire .我将使用 rewire 作为示例。

您要 stub 的代码片段:

var redisClient = redis.createClient(redisPort, redisHost);
var someValue = redisClient.get("someKey");
return someValue;

然后在你的测试中你可以使用 rewire:

var Rewire = require('rewire');

var myModule = Rewire("../your/module/to/test.js");

var redisMock = {
get: sinon.spy(function(something){
return "someValue";
});
};

myModule.__set__('redisClient', redisMock);

这样你可以替换你的redisClient,你可以通过spy检查函数是否被调用。

关于javascript - 使用 Sinon 在 javascript 中 stub Redis 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24937212/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com