rspec:如何测试redis#subscribe代码?
给出类似的东西:
class MyClass
def subscribe
$redis.subscribe('channel') do |on|
on.message do |channel, msg|
Something.create(msg)
end
end
end
end
如何测试MyClass
执行subscribe
时它将Something.create
针对通道上收到的每条消息运行?
-
您拥有的这段代码不是很容易测试。首先,绝对要摆脱这个全局
$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 end end
然后在测试中,您可以制作一个完全可以控制但与您使用的api一致的虚拟redis。遵循以下原则:
class DummyRedis def subscribe(&block) @block = block end def trigger_on @block.call make_on_message end end fake_redis = DummyRedis.new expect { mc = MyClass.new(fake_redis) mc.subscribe fake_redis.trigger_on }.to change{Something.count}.from(0).to(1)
这种很酷的技术称为“依赖注入”(或者像某些人所说的那样,“将参数传递给构造函数”)。
-
如何运行单个 RSpec 测试?
2022-04-11 关注 0 浏览44 1答案
-
如何在 RSpec 中运行单个测试/规范文件?
2022-05-26 关注 0 浏览9 1答案
-
如何在Capybara和RSpec中测试CSV文件下载?
2021-02-01 关注 0 浏览44 1答案
-
当数据值更改时,如何将redis PUBLISH / SUBSCRIBE与nodejs一起使用来通知客户端?
2021-02-02 关注 0 浏览93 1答案
-
当数据值更改时,如何将redis PUBLISH / SUBSCRIBE与nodejs一起使用来通知客户端?
2021-02-01 关注 0 浏览140 1答案
-
如何使用RSpec检查JSON响应?
2021-01-31 关注 0 浏览71 1答案
-
Lua脚本和Redis-如何测试None值
2021-02-01 关注 0 浏览318 1答案
-
如何测试我的Redis缓存是否正常工作?
2021-02-01 关注 0 浏览88 1答案
-
如何性能测试JavaScript代码?
2021-02-02 关注 0 浏览213 1答案
-
如何对 Arduino 代码进行单元测试?
2022-07-28 关注 0 浏览20 1答案