单元测试调试之传参篇

文章是从我的个人博客上粘贴过来的,

大家也可以访问 www.iwangzheng.com

 

今天有两个单元测试一直跑不通,究其原因是没搞清楚单元测试的传参的概念,之前大师强调过的,今天pp又讲解了一遍。以第一个单元测试的测试模块的25行为例

25 put :modify, :id => @list.id, :rankinglist => {:title => new_title}

这个报错是因为我写成了list =>{:title => new_title},但是被测模块里是没有这个参数的,想知道有啥就看被测模块 params里面的内容啊,有几个传几个就行。

这个巧合的是我的前端代码是这样的

<%=  text_field_tag  'title' ,@rankinglist.title  %>由于text_field_tag里的内容在html里解析为id=‘title’,name ='title',所以在25行里没有:title也是ok的

23def modify
24 @rankinglist.title = params[:title]
25 if @rankinglist.update_attributes(params[:rankinglist])
26 redirect_to edit_tv_i_rankinglist_path(:id => @rankinglist.id) , :notice => '操作成功'
27 else
28 render :action => "edit"
29 end
30 end

 

对应的单元测试

23it 'should put update' do
24 new_title = 'test'
25 put :modify, :id => @list.id, :rankinglist => {:title => new_title}
26 @list.reload.title.should == new_title
27 end

 

再来看第二个写错的单元测试

5def index
6 @module_type = params[:module_type]
7 @rankinglists = CmsTvRankingList.where('state = ? ', 1)
8 @rankinglist = CmsTvRankingList.find_by_id(params[:rankinglist_id]) || @rankinglists.try(:first)
9 @modules = CmsTvRankingListModule.where('rankinglist_type = ? ', @rankinglist.id).order(:position)
10 end

对应的单元测试

5before do
6 admin_login
7 request.env["HTTP_REFERER"] = root_path
8 @rankinglist = CmsTvRankingList.create(:title =>'5' ,:state => '1')
9 @module = CmsTvRankingListModule.create(:title => '测试', :rankinglist_type => 5)
10 end
11 it 'should get index' do
12 get :index, :rankinglist_id =>'1'
13 response.should be_success
14 end

错在哪里呢,由于这个排行榜子菜单是在排行榜菜单内部的,所以是需要先保证被测的第8行是有值的,所以需要写上测试里的第8行,当然,测试的12行后半句也是必要的。

posted @ 2014-03-25 20:36  冰凌花花~  阅读(504)  评论(0编辑  收藏  举报