使用mocha进行存根时替换方法实现

时间:2014-10-29 14:24:34

标签: ruby-on-rails ruby testing rspec stubbing

我已经习惯了RSpec,你可以使用evalueted lazily的块来存储方法实现。

现在我正在处理一个项目的拉取请求,该项目使用Test :: Unit和mocha作为模拟库。

我需要能够执行类似于rspec示例的操作,即用依赖于对象状态的动态替换方法实现,因此我不能使用mocha #returns方法提供的静态调用。 / p>

有什么方法可以使用mocha获得相同的功能,我还无法找到相关的任何文档吗?

我需要实现与此类似的东西(RSpec 2.14语法)

class SomeController < ApplicationController
  before_filter :authenticate

  def authenticate
    # original method I need to replace
  end

  def some_other_method
    :bar
  end

end

describe SomeController do

  before do
    controller.stub :authenticate do
      redirect_to root_path if some_other_method == :foo
    end
  end

  it 'should test something' do
    controller.stub(some_other_method: :foo)
    get :index
    response.should redirect_to root_path
  end

  it 'should test something else' do
    get :index
    response.should be_successful
  end

end

1 个答案:

答案 0 :(得分:2)

您是否只能在def个实例上使用controller

def controller.some_other_method
  :foo
end