让我们说我们有一个班级:
class ObjectWithCaching
def cached_attribute(key, cache_handler)
cache_handler.cache(key) { expensive_operation }
end
def expensive_operation
#...
end
end
我们已经测试了cache_handler,因此我们知道只有在key
中找不到cache
时才会执行该块。
我们想测试cache_handler #cache是否正确执行。
问题是:如何编写剩余的待处理规范?
describe ObjectWithCaching, "#cached_attribute" do
let(:key) { double }
let(:cache_handler) { double }
specify do
cache_handler.should_receive(:cache).with(key)
subject.cached_attribute(key, cache_handler)
end
it "passes #expensive_operation to block of cache_handler#cache" do
pending
subject.cached_attribute(key, cache_handler)
end
end
答案 0 :(得分:2)
这就是我要做的。在同一个对象上模拟另一个方法(可能expensive_operation
属于另一个类吗?)感觉很脏,但是考虑到约束,我认为这是要走的路。能够直接传递函数并在Clojure中检查函数相等性肯定会很好:)
it "passes #expensive_operation to block of cache_handler#cache" do
cache_handler.stub!(:cache) do |k, block|
subject.should_receive(:expensive_operation)
block.call
end
subject.cached_attribute(key, cache_handler)
end