Ruby on rails Rails控制器规范中的模拟外部类

Ruby on rails Rails控制器规范中的模拟外部类,ruby-on-rails,ruby,ruby-on-rails-3,rspec,rspec2,Ruby On Rails,Ruby,Ruby On Rails 3,Rspec,Rspec2,我有一个Rails 3应用程序,我正在用RSpec进行测试。我有一个控制器使用外部类MustMockas class FooController < ApplicationController def myaction mockme = MustMock.new @foobar = mockme.do_something end end class FooController

我有一个Rails 3应用程序,我正在用RSpec进行测试。我有一个控制器使用外部类
MustMock
as

class FooController < ApplicationController
  def myaction
    mockme = MustMock.new
    @foobar = mockme.do_something
  end
end
class FooController
如何在我的控制器规范中最好地模拟
MustMock
的实例?

您可以尝试以下方法:

it "does something in myaction" do
    my_stub = stub()
    my_stub.should_receive(:do_something).once.and_return(:foobar)
    MustMock.stub(:new => my_stub)
    get :myaction
    response.should be_success
end

一个小小的诡辩-我倾向于把
响应放在一个共享的例子中,因为在一个页面上想要这样做是很常见的。YMMV是的,有几种方法可以改进测试。我怀疑OP的控制器动作更复杂,他/她将问题提炼为最小的可证明动作。完全同意,我的意思确实是次要:)+1,我非常喜欢这个区块的形式。我要模仿你的风格!:)
describe FooController do
  specify :myaction do
    MustMock.should_receive(:new)
            .and_return(stub :do_something => :something)
    get :myaction
    assigns[:foobar].should == :something
  end
end