Как проверить действие контроллера поиска, который имеет фильтры в Rails с RSpec? - PullRequest
4 голосов
/ 16 сентября 2011

У нас есть панель с фильтрами почти во всех наших табличных представлениях в приложении rails, и нам нужно протестировать действие контроллера.

Пример кода:

def index
  @users = User.
    with_status(params[:status]).
    with_role(params[:role_id]).
    search(params[:q])
end

Вышеуказанные методы являются областями ActiveRecord, которые настраиваются на обход, если переданное значение пусто.

Что мне нужно сделать сейчас, так это проверить и протестировать все случаи esge:

  • параметры не переданы
  • только роль, только статус, только поиск
  • роль + статус, роль + поиск, ... (пары из 2)
  • роль + статус + поиск

Базовый пример спецификации, который я написал, выглядит следующим образом:

context "when filtering by status" do
  before do
    1.times { Factory(:user, :status => "one") }
    3.times { Factory(:user, :status => "other") }
  end

  it "returns only users with the provided :status" do
    get :index, :status => "one"

    assigns(:users).size.should == 1
    assigns(:users)[0].status.should == "one"
  end
end

Я хочу написать матрицу, которая будет смешивать и сопоставлять роль, статус и параметры поиска и генерировать соответствующие примеры спецификаций.

Является ли перестановка Array # решением или есть лучший способ сделать это?

1 Ответ

1 голос
/ 04 октября 2011

Я бы протестировал области действия в модели, поэтому убедитесь, что они могут правильно обрабатывать пустое значение, а также корректно обрабатывать установленное значение.

Затем внутри контроллера я проверю ожидание того, чтоцепочка называется (используйте stub_chain).Тот факт, что цепочка вернет правильный результат, обрабатывается тем фактом, что каждая область по отдельности имеет правильное поведение (вы это проверяли), а комбинированное поведение обеспечивается с помощью rails / activerecord.Вы должны проверить, что переданные параметры обрабатываются правильно.

Код, созданный вами для проверки матрицы, очень впечатляет.Но для меня я стараюсь убедиться, что мои тесты читаемы, я считаю их своего рода документацией того, что ожидается от кода.Мне твой код не понятен с первого взгляда.

Надеюсь, это поможет.

...