2015-04-24 142 views
0

我在測試我的應用程序。我有一個功能,您可以通過名字,姓氏,城市,州等搜索註冊成員...我認爲集成測試會比控制器測試更好,但我很難找出在哪裏開始。這裏是我的控制器代碼:爲搜索控制器編寫Rails集成測試

class MsearchesController < ApplicationController 

    def new 
    @msearch = Msearch.new 
    @first_name = User.uniq.pluck(:first_name) 
    @last_name = User.uniq.pluck(:last_name) 
    @state = User.uniq.pluck(:state) 
    @cities = User.uniq.pluck(:city) 
    end 

    def create 
    @msearch = Msearch.create(msearch_params) 
    redirect_to @msearch 
    end 

    def show 
    @users = User.all 

    @msearch = Msearch.find(params[:id]) 
    @first_name = User.uniq.pluck(:first_name) 
    @last_name = User.uniq.pluck(:last_name) 
    @states = User.uniq.pluck(:state) 
    @cities = User.uniq.pluck(:city) 
    end 

    def update 
    @msearch = Msearch.new 
    end 

private 

    def msearch_params 
    params.require(:msearch).permit(:first_name, :last_name, :state, :city, :agency) 
    end 

end 

任何幫助讓我開始將非常感激!

回答

0

我同意在驗收級別上比在Controller級別上測試得更好,因爲在控制器測試中沒有什麼可以真正維護的,它將驗證它是否按照它的設想進行了測試。 Controller將工作委託給業務對象和視圖。你需要鍛鍊所有這些來驗證它是否正確地完成了工作。因此,控制器單元測試通常是多餘的。

我會使用類似下面的內容在驗收級別測試此功能(假設您正在使用Capybara和FactoryGirl)。

feature "User Search", type: :feature do 

    scenario "search for user by first name" do 
    @frodo = create(:user, first_name: "Frodo") 
    @sam = create(:user, first_name: "Sam") 

    visit new_msearch_path 
    fill_in "user_first_name", with: "Frodo" 
    click_button "Search" 

    expect(page).to have_content "Frodo" 
    expect(page).to_not have_content "Sam" 
    end 

    # ... similar tests to cover each field/search case ... 

end 

難道Msearch類是寶石嗎?或者你自己實現它?如果是你自己的班級,你可能也想在單元級別進行測試,這樣你就可以在沒有整個棧的開銷的情況下運行更復雜的邊界案例。

+0

感謝您的指導! –