rspec2 - rspec 2 : detect call to method but still have it perform its function

标签 rspec2

我想检查一个方法是否被精确调用 (n) 次,但我仍然希望该方法执行其原始功能。考虑一个简单的缩略图系统,它缓存缩略图文件并确保仅在第一个请求时调用 ImageMagick 创建缩略图的“转换”可执行文件。

  it "this passes: should detect a cached version" do
    thumbnail_url = thumbnail_url_for("images/something.jpg")
    get thumbnail_url
    last_response.should be_ok
    Sinatra::Thumbnail.should_not_receive(:convert)
    get thumbnail_url
    last_response.should be_ok
  end

  it "this fails:  should detect a cached version" do
    Sinatra::Thumbnail.should_receive(:convert).exactly(1).times
    thumbnail_url = thumbnail_url_for("images/something.jpg")
    get thumbnail_url
    last_response.should be_ok
    get thumbnail_url
    last_response.should be_ok
 end

在我的情况下,我第一次尝试就成功了,但在某些情况下我可能没有。第二个失败,因为调用 Thumbnail.convert被检测到,但方法本身不做任何事情。有什么方法可以检测对方法的调用并让它做它的原始事情吗?

顺便说一句:我怀疑这个 question非常相似,但后来我在描述中迷失了方向,而且也没有答案......

最佳答案

现在有一个 and_call_original方法正是针对此用例。 (RSpec 2.12)

Sinatra::Thumbnails.should_receive(:convert).and_call_original

该文档可以在 Joao 引用的同一页面上找到,here .

另见:changelog

关于rspec2 - rspec 2 : detect call to method but still have it perform its function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7206453/

相关文章:

rspec - 模拟 Rails.env.development?使用 rspec

ruby-on-rails - Rspec 没有路由匹配

ruby-on-rails - 在 Rspec 测试中处理非 ascii 字符

rspec - 我可以只为一个参数调用覆盖 RSpec 中的一个方法吗

ruby-on-rails-3 - 使用 rspec 测试文件图像大小验证,而无需在夹具中使用大文件

ruby-on-rails - rspec 用户测试给出 "undefined local variable or method ` confirmed_at' "

ruby-on-rails-3 - 导轨 3 + Rspec 2 : Testing content_for

ruby-on-rails-3 - RSpec 中的动态定义方法抛出错误

ruby - 使用 Rspec 2 测试命令行应用程序的 UI 层

ruby - 使用 RSpec 2 测试 RUBY_PLATFORM