Rails验证与路由排除

时间:2011-08-31 16:21:39

标签: ruby-on-rails ruby rspec rake rspec-rails

如果用户名等于第一个路由块之一,我想测试用户是否无效。 我现在用这种方式在rspec中对它进行了规范:

it "is not valid with a excluded username" do
  `bundle exec rake routes`.scan(/\s\/(\w+)/).flatten.compact.uniq.each do |route|
    user.username = route
    user.should_not be_valid
  end
end

问题是,这减慢了我的规格,是否有更好的方法来规范是否排除了每个第一个路径元素?

1 个答案:

答案 0 :(得分:3)

减慢规格的因素是bundle exec rake routes,因为它再次加载了rails环境。为了防止这种情况,您可以从实际的rake任务中提取显示路径的代码(可以在rails github repo中找到)。通过这些修改,您的规范可能如下所示:

it "is not valid with a excluded username" do
  Rails.application.routes.routes.map(&:path).join("\n").scan(/\s\/(\w+)/).flatten.compact.uniq.each do |route|
    # blahblah
  end
end