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
为零的警告
我想问的另一件事是这种问题的正确方法吗?
我在等待回复
答案 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
,因为只返回了一行。