2011-09-23 199 views
0

我试图运行这样的测试:从控制器Rspec的控制器测试失败

it "render form to update an bundle with a specific id" do 
    bundle = mock_model(Bundle) 
    Bundle.stub!(:find).with("1") { bundle } 

    get :edit, :locale => "en", :id => 1 
    Bundle.should_receive(:find).with("1").and_return(bundle) 
end 

代码:

class BundlesController < ApplicationController 
    # GET /bundles 
    # GET /bundles.json 
    ..... 

    # GET /bundles/1/edit 
    def edit 
    @bundle = Bundle.find(params[:id]) 
    end 
    ..... 
end 

但测试失败消息:

BundlesController捆绑更新的形式呈现使用特定ID更新捆绑软件 失败/错误:Bundle.should_receive(:find).with(“1”)。and_return(bundle) ().find(“1”) 预期:1周时间 好评:0次 #./spec/controllers/bundles_controller_spec.rb:60:in`块(3级)的“

谁能帮助我? 谢谢!

+0

我们没有证据表明控制器实际上有一个编辑操作,或者编辑操作调用了'Bundle.find'。请给我们更多的代码。 –

+0

我的猜测是:用一个字符串'“1”代替整数'1':':id =>“1”'。 – rdvdijk

回答

2

这里有几个问题,也许更多的是因为你发布了更多的代码。

首先,您要在Bundle上设置存根和期望值,然后向我们显示加载Role的代码。

其次,您在测试结束时调用#should_receive。此方法设置了测试中的代码的期望值。除非你有一些隐藏的回调,你没有向我们展示,否则这总是会失败。反转订单。

Bundle.should_receive(:find).with("1").and_return(bundle) 
get :edit, :locale => "en", :id => 1