我正在使用 rspec 测试我的控制器并遇到了一个有趣的问题。我有我的控制器,Admin::CategoriesController
带有索引操作。我对路线有限制:
resources :categories, only: [:edit, :update, :destroy] do
collection do
get ':kind', action: :index, as: '', kind: /(blog|news)/
end
end
所以,当我在索引上写规范时:
it 'does not reply on not existing kind' do
expect { get :index, kind: 'qwe' }.to raise_error(ActionController::RoutingError)
end
它通过了。但后来我决定接受路线的约束:
class CategoryKindConstraint
def self.matches?(request)
%w(blog news).include? request.query_parameters['kind']
end
end
get ':kind', action: :index, as: '', constraints: CategoryKindConstraint
并且测试开始失败。没有提出异常。但同样 - 如果我改为:
expect { get admin_categories_path(kind: 'qwe') }.to raise_error(ActionController::RoutingError)
我得到了绿色的结果。那么区别是什么呢?