2015-09-06 77 views
1

请帮忙写控制器测试。如何测试一个返回json的控制器?

页具有Ajax的按钮约图像显示详细信息:

$('#thumbsList .thumb').on('click', function(){ 
    var imageId = $(this).closest('article').attr('data-image-id'), 
     form = $(this).closest('form'); 

    $.ajax({ 
    url: '/images/' + imageId, 
    type: 'GET', 
    data: form.serialize(), 
    success: function(image){  
     $('#detailImageMeta').html(constructMeta(image)); 
    }  
    }); 
}); 

路线:

image GET /images/:id(.:format)      images#show 

imageController:

def show 
    image_detail = Image.find(image_params[:image_id]) 

    if image_detail 
     render json: { 
     user_id: image_detail.user_id 
     }, :status => 200 
    else 
     render nothing: true, :status => 404 
    end 
    end 

规格/控制器/ image_controller_spec.rb:

it 'response is success' do 
    image = FactoryGirl.create(:image)  
    get :show, id: image.id, image_id: image.id 
    expect(response).to be_success 
end 

但是当我运行在控制台规格然后得到遵循错误消息:

[email protected] ~/rails/phs $ rspec spec/controllers/images_controller_spec.rb 
FFF 
Failures: 
    1) ImagesController GET #show response is success 
    Failure/Error: get :show, id: image.id, image_id: image.id 
    ActionController::ParameterMissing: 
     param is missing or the value is empty: image 

请帮忙检查控制

+0

在你的控制器中,你有这个:'image_detail = Image.find(image_params [:image_id])',应该是:'params [:image_id]?而不是'image_params [:image_id]'?它工作吗? –

回答

1

在你的控制器的show行动,

变化:

image_detail = Image.find(image_params[:image_id]) 

收件人:

image_detail = Image.find(params[:image_id]) 
相关问题