测试使用inherited_resources的控制器时,模型存根错误

时间:2011-07-27 09:22:46

标签: ruby-on-rails-3 rspec2 inherited-resources

我是RSpec的新手,我的控制器使用的是inherited_resources,我有这样的模拟/存根设置:

describe MarketsController do
  def mock_market(stubs={})
    @mock_market ||= mock_model(Market, stubs).as_null_object
  end

  describe "GET index" do
    it "assigns all markets as @markets" do
      Market.stub(:all){ [mock_market] }
      get :index

      assigns(:markets).should eql([mock_market])
    end
  end
end

这个规范失败了,因为分配(市场)中没有任何内容。我添加后:

class MarketsController
    def index
        @markets = Market.all
    end
end

它会通过,所以我想这是因为inherited_resources没有调用 Market.all 来获取所有的Market实例,从而绕过了 Market.stub(:all)的存根)即可。我上面添加的索引方法显然是多余的,根本不存在,所以问题是,如果没有明确调用Market.all,我应该在我的规范中做些什么来完成测试?提前谢谢!

1 个答案:

答案 0 :(得分:1)

如果我正确阅读代码,inherited_resources首先尝试使用Market.scoped(如果存在)。那么你有scoped范围吗?