Rspec控制器测试失败

时间:2011-09-23 14:21:10

标签: ruby-on-rails ruby rspec controller

我正在尝试进行此类测试:

 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 Bundle更新渲染表单以更新具有特定id的bundle      失败/错误:Bundle.should_receive(:find).with(“1”)。and_return(bundle)        ().find( “1”)            预计:1次            收到:0次      #./spec/controllers/bundles_controller_spec.rb:60:in'块(3级)in'

任何人都可以帮助我吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

这里有一些问题,也许会发布更多代码。

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

其次,你在考试结束时打电话给#should_receive。此方法设置了对测试之后的代码的期望。除非你有一些你没有向我们展示的隐藏回调,否则这总会失败。颠倒顺序。

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