如何解决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
,因为只返回一行