У нас есть панель с фильтрами почти во всех наших табличных представлениях в приложении 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 # решением или есть лучший способ сделать это?