2014-09-10 84 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