rspec:如何测试redis#subscribe代码?

rspec:如何测试redis#subscribe代码?,第1张

rspec:如何测试redis#subscribe代码

您拥有的这段代码不是很容易测试。首先,绝对要摆脱这个全局

$redis
变量。相反,在构造函数中接受redis实例。

class MyClass  attr_reader :redis  def initialize(redis)    @redis = redis  end  def subscribe    redis.subscribe('channel') do |on|       on.message do |channel, msg|         Something.create(msg)       end    end  endend

然后在测试中,您可以制作一个完全可以控制但与您使用的api一致的虚拟redis。遵循以下原则:

class DummyRedis  def subscribe(&block)    @block = block  end  def trigger_on    @block.call make_on_message  endendfake_redis = DummyRedis.newexpect {  mc = MyClass.new(fake_redis)  mc.subscribe  fake_redis.trigger_on}.to change{Something.count}.from(0).to(1)

这种很酷的技术称为“依赖注入”(或者像某些人所说的那样,“将参数传递给构造函数”)。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4907177.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存