0

我想使用 RR 为我的控制器编写 RSpec。

我写了以下代码:

require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')

describe RegistrationController do

    it "should work" do 
        #deploy and approve are member functions
        stub.instance_of(Registration).approve { true }
        stub.instance_of(Registration).deploy { true }
        post :register
    end 
end

然而,当仍然调用原始的批准方法时, RR 存根仅部署方法。

我应该使用什么语法来存根注册类的所有实例的两个方法调用?

更新: 我用 [Mocha] 达到了预期的结果

Registration.any_instance.stubs(:deploy).returns(true)
Registration.any_instance.stubs(:approve).returns(true)
4

2 回答 2

1

看来您描述的行为实际上是一个错误:

http://github.com/btakita/rr/issues#issue/17

于 2010-04-27T21:24:53.623 回答
-1

据我所知,RSpec 模拟不允许你这样做。您确定需要存根所有实例吗?我通常遵循这种模式:

describe RegistrationController do
    before(:each) do
       @registration = mock_model(Registration, :approve => true, :deploy => true)
       Registration.stub!(:find => @registration)
       # now each call to Registration.find will return my mocked object
    end

    it "should work" do 
      post :register
      reponse.should be_success
    end

    it "should call approve" do
      @registration.should_receive(:approve).once.and_return(true)
      post :register
    end

    # etc 
end

通过对您控制的 Registration 类的 find 方法进行存根,规范中将返回什么对象。

于 2009-05-30T19:03:30.660 回答