0

我一直在尝试深入研究 RSpec 2,但其自动生成的控制器规范不适用于任何版本的 RSpec 2 以及任何版本的 Ruby 或任何版本的 Rails。也许我错过了一些明显的东西?

def mock_category(stubs={})
  @mock_category ||= mock_model(Category, stubs).as_null_object
end

describe "GET show" do
  it "assigns the requested category as @category" do
    Category.stub(:find).with("37") { mock_category }
    get :show, :id => "37"
    assigns(:category).should be(mock_category)
  end
end

这是自动生成的rails g scaffold Category

RSpec 返回:

Failures:
   1) CategoriesController GET show assigns the requested category as @category
    Failure/Error: assigns(:category).should be(mock_category)
    expected Category_1002, got nil
    # ./spec/controllers/categories_controller_spec.rb:21
    # /Library/Ruby/Gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `inject'

为什么这个模拟/存根返回nil

更新

这是来自我的控制器的 show 方法:

def show
   @category = Category.find(params[:id])

  respond_to do |format|
    format.html # show.html.erb
    format.xml  { render :xml => @category }
  end
end

谢谢!

4

2 回答 2

0

唔。好吧,如果有什么问题,我肯定看不到。也许show根本没有采取行动?是否有任何before_filter陈述妨碍?

您可以尝试添加一些测试以查看是否已完成分配。像

controller.should_receive(:show)

顺便说一句.as_null_object,告诉模拟忽略你不存根的消息。这有助于依赖于验证或其他约束的对象,否则您必须将其存根才能获得可以测试的对象。但请注意不要忽略您应该测试的消息。

于 2010-09-03T19:14:47.177 回答
0

RSpec 在 Rails3 beta 和 RSpec 2 beta.10 到 Rails3 版本和 RSpec 2 beta.20 之间存在一些严重的冲突。

我尝试复制和粘贴脚手架之间的差异,但我通过删除所有规范并重新生成它们来完全清理站点。卸载haml和安装仅haml-rails适用于 rails 3。

所有规格现在运行。

于 2010-09-04T13:29:25.123 回答