2015-04-24 3 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

Я согласен, что это лучше проверяется на уровне приема, чем на уровне контроллера, поскольку в тесте контроллера нет ничего, что могло бы подтвердить утверждение, которое бы подтвердило, что оно делает то, что должно быть. Контроллер делегирует работу бизнес-объектам и представлениям. Вы должны использовать их все, чтобы убедиться, что он правильно выполняет работу. По этой причине тесты блока управления обычно являются излишними.

Для проверки этой функциональности на уровне приема я использовал бы что-то вроде следующего (предполагается, что вы используете 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

Спасибо за направление! –

Смежные вопросы