如何解决rspec中的nil错误

时间:2010-12-08 04:30:52

标签: rspec

HII,

我遇到一个nil错误的问题。我的控制器代码是这样的

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_mock.servers为零的警告

我想问的另一件事是这种问题的正确方法吗?

我在等待回复

1 个答案:

答案 0 :(得分:0)

您没有在servers模拟上存根User方法,因此规范无法从该点继续。像这样修复它:

@user_mock.stub(:servers).and_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,因为只返回了一行。