了解测试Rails控制器中的存根

时间:2014-02-11 20:07:10

标签: ruby-on-rails ruby rspec

在阅读“Antipatterns for Rails controllers”上的这篇文章之后,我对存根有疑问。代码如下:

describe "GET show" do
  let(:user) { build_stubbed(User) }
  let(:report) { build_stubbed(Report) }

  before do
    User.stub(:find) { user }
    user.stub(:find_report) { report }
  end

  describe "GET show" do
    it "finds the user's report" do
      user.should_receive(:find_report) { report }

      get :show, :user_id => user.id, :id => report.id
    end
  ...
end

我的问题是......当我们执行以下操作时:

User.stub(:find) { user }
user.stub(:find_report) { report }

我想我们正在为User类和用户对象创建一个stubbed方法,并且块之间的内容是参数。

所以,我担心的是,这个'stub'方法定义在哪里?我知道build_stubbed来自FactoryGirl,但是'stub'定义在哪里?

而且,以下是做什么的:

user.should_receive(:find_report) { report }

{ report }在做什么?

1 个答案:

答案 0 :(得分:0)

  

我知道build_stubbed来自FactoryGirl,但是'stub'定义在哪里?

此处的“存根”方法由RSpec添加到每个对象,请参阅此处的文档:http://rubydoc.info/gems/rspec-mocks/frames

  

{report}在做什么?

上面也记录了这一点,但是它指定了stubbed方法:find_report将返回report,在这种情况下指的是:

let(:report) { build_stubbed(Report) }