您拥有的这段代码不是很容易测试。首先,绝对要摆脱这个全局
$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)
这种很酷的技术称为“依赖注入”(或者像某些人所说的那样,“将参数传递给构造函数”)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)