2010-09-03 73 views
0

我一直试图潜入RSpec 2,但其自动生成的控制器规范不适用于任何版本的Ruby或任何版本的Rails的RSpec 2的任何版本。也许我错过了一些明显的东西?有人可以向我描述RSpec 2在这方面做了什么?

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

更新

这是我的控制器的显示方法:

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

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

谢谢!

+0

我不知道'.as_null_object'确实存在,或者它为什么存在,但是这看起来应该不存在。尝试删除它。 – 2010-09-03 18:07:06

+0

你可以发布索引方法的内容吗? – zetetic 2010-09-03 18:17:35

+0

@zetetic,我是个白痴,我发布了错误的例子。上面的只是稍有不同。你想从中看到什么方法吗? – Trip 2010-09-03 18:30:04

回答

0

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

我试着复制和粘贴脚手架之间的差异,但是我完全通过删除所有规格并重新生成它们来清理了这个位置。卸载haml,并且仅安装轨道3的haml-rails

所有规格现在运行。

0

嗯。那么如果有什么不对,我肯定不会看到它。或许show行动根本没有达成?是否有任何before_filter声明妨碍您的行为?

您可以尝试添加一些测试以查看是否正在到达作业。像

controller.should_receive(:show)

BTW .as_null_object告诉模拟忽略不存根消息。这有助于取决于验证或其他约束的对象,否则为了获得可以测试的对象,您必须将它们取出。但要小心,不要忽略你应该测试的消息。

+0

我想我已经推断这是因为它缺少发生器的一些基本部分。因为我不能重现这个问题,所以我发现这是因为该项目是从Rails 3测试版开始的,而新的Rspec则是这些生成器发生冲突。我不知道如何从项目中剥离rspec并重新创建它们。 – Trip 2010-09-03 19:41:13

+1

你听说过这样一句话:“永远不要相信吸毒者”?为此,我补充道:“永远不要相信发电机”:) – zetetic 2010-09-03 20:20:31

相关问题