【问题标题】:Rspec controller test failsRspec 控制器测试失败
【发布时间】:2011-09-23 14:21:09
【问题描述】:

我正在尝试运行这样的测试:

 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.should_receive(:find).with("1").and_return(bundle) ().find("1") 预计:1次 收到:0次 # ./spec/controllers/bundles_controller_spec.rb:60:in `block (3 levels) in '

谁能帮助我? 谢谢!

【问题讨论】:

  • 没有证据表明控制器确实有一个编辑操作,或者编辑操作调用了Bundle.find。请向我们展示更多代码。
  • 我的猜测:使用字符串 "1" 代替整数 1: :id =&gt; "1"

标签: ruby-on-rails ruby rspec controller


【解决方案1】:

这里有几个问题,当您发布更多代码时可能会更多。

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

其次,您在测试结束时调用#should_receive。此方法为您的测试中紧随其后的代码设置了期望。除非你有一些隐藏的回调,你没有向我们展示,否则这总是会失败。颠倒顺序。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    相关资源
    最近更新 更多