如何解决rspec中的零误差

如何解决rspec中的零误差,rspec,Rspec,嗨 我的控制器代码是这样的 def list @users=User.find(params[:id]) if (@users.servers.count>0) puts 'more than one' else puts 'equal or less than one' end end 我的Rspec代码是 it'should_test_list' do @user_mock=mock(User) User.should_receive(:fi

我的控制器代码是这样的

def list
  @users=User.find(params[:id])

  if (@users.servers.count>0)
    puts 'more than one'
  else
    puts 'equal or less than one'
  end
end
我的Rspec代码是

it'should_test_list' do
  @user_mock=mock(User)
  User.should_receive(:find).and_return(@user_mock)
  @user_mock.should_receive(servers).and_return(@user_mock.servers)
  @user_mock.servers.should_receive(:count).and_return(1)
end
我收到警告说
@user\u mock.servers
为零

还有一件事我想问,这是解决这个问题的正确方法吗


我正在等待回复

您尚未在
用户
模拟上删除
服务器
方法,因此规范无法从该点继续。像这样解决它:

@user\u mock.stub(:server.)和\u return([mock])
。或者在创建模拟时添加它

此外,您的规范从不调用控制器操作。您需要一个
get:list
。例如:

describe UsersController do
  it 'should list' do
    @user_mock = mock(User,:servers=>[mock])
    User.should_receive(:find).and_return(@user_mock)
    @user_mock.servers.should_receive(:count).and_return(1)
    get :list, :id => 1
  end
end
最后一点注意:我假设在
@users=User.find(params[:id])
中,您的意思是
@User
,因为只返回一行