意外的RSpec #should_receive行为

时间:2012-10-09 12:03:43

标签: ruby-on-rails ruby rspec rspec-rails

肯定我错过了什么......但是什么!?

在我的规范中我已经

User.should_receive(:find).with("1").and_return(@user)

并在我的控制器中

User.find(params[:id])

绿灯......正确......

但如果我使用其他方法更改控制器,例如首先:

User.first

甚至

User.all

我也得到了绿灯......我期待像

这样的错误
expected: 1 time
received: 0 times

任何人都可以给我一个提示来理解这种行为吗?

非常感谢

修改

在这里,您可以找到有关此问题的更多信息:https://gist.github.com/3848429#file_user_controller_spec.rb

编辑2

我的规范现在,但我仍然需要检查方法是调用每个#find ...

describe "GET #show" do
  before(:each) do
    @user = mock_model(User)
    should_authorize(:show, @user)
  end

  it "assigns the requested user to @user" do
    User.should_receive(:find).with("1").twice.and_return(@user)
    get :show, id: "1"
  end
  it "renders the :show template" do
    get :show, id: "1"
    response.should render_template :show
  end
end

1 个答案:

答案 0 :(得分:1)

我认为你不需要User.stub!(:find)...User.should_receive(:find)...,因为should_receive基本上就像一个存根。我会删除第一个,看看是否会改变行为。