2014-09-10 86 views
1

我控制器动作像Rspec的测试控制器使得部分当地人

def get_status 
    status_name = current_user.status 
    status_updated_time = current_user.updated_at 
    render :partial => 'show_status', :locals => {status_name: status_name, status_updated_time: status_updated_time} 
end 

这里我计划测试其传递通过渲染部分的局部变量的值。即
status_name,status_updated_time

可否请你让我知道如何写rspecs的渲染部分当地人的控制器。

回答

0

我会移动变量逻辑到一个单独的方法:

def get_status 
    render partial: 'show_status', locals: get_status_from(current_user) 
end 

protected 

def get_status_from(user) 
    { status_name: user.status, status_updated_time: user.updated_at } 
end 

和测试方法来代替。

0

我要说的是测试控制器,什么你追求的是一个基本的功能/集成规范,其中你可以简单地寻找你的部分保存的内容。

feature 'SomeController' do 
    background do 
    # setup data 
    # and anything else you need for authentication, etc. as your site dictates 
    end 

    scenario 'viewing the get status page' do 
    visit some_controller_get_status_path 
    expect(page).to have_text('WHATEVER IS IN THE LOCAL VAR') 
    end 
end 

我更喜欢控制规范使用功能,规格为我寻求的(但往往失败!)让我的控制器如此简单,没有太多真正在他们测试。随着功能的规格,我觉得我在如何我的应用程序作品等

编辑方面得到从测试更多:对不起......命中进入太早:)。

对于一个控制器,可以直接测试沿着线的VAR值:

describe "Your Controller", :type => :controller do 
    describe "GET get_stuff" do 
    it "assigns a value to status_name" do 
     get :get_status 
     expect(assigns(:status_name)).to eq(['VALUE']) 
    end 
    end 
end 

这可能不是100%正确的,对控制器的规格(同样,我不使用他们很多),但是我认为如果你按照功能/集成规范进行控制器规格说明,它应该能够让你顺利进行。

0

你可以做类似

it "should render correct partial for get_status" do 
    controller.should_receive(:render).with({ 
    :partial => '_show_status', #here you will have to give the full path like <controller_name>/_show_status 
    :locals => {status_name: <name>, status_update_time: <time>} 
    }) 
    get 'get_status' 
end