【发布时间】:2011-04-20 20:34:10
【问题描述】:
给定数据库中的几个城市:
City.first.attributes => {:id => 1, :name => 'nyc'}
City.last.attributes => {:id => 2, :name => 'boston'}
还有这样的路线:
match '/:city/*dest' => 'cities#do_something', :constraints => {:city => /#{City.all.map{|c| c.name}.join('|'}/}
(因此约束应计算为:/nyc|boston/)
还有一个规范:
it "recognizes and generates a route for city specific paths" do
{ :put => '/bad-city/some/path' }.should route_to({:controller => "cities", :action => "do_something", :dest => 'some/path', :city => 'bad-city'})
end
我预计会失败。但它通过了。
同样:
it "doesn't route bad city names" do
{ :put => '/some-bad-city/some/path' }.should_not be_routable
end
在这里我希望它通过,但它失败了。
规范中似乎忽略了约束,因为匹配的城市与不良城市具有相同的行为。
这是一个已知问题,还是我错过了一些我需要做的事情?
【问题讨论】:
-
因为这适用于开发,但不适用于测试,我认为问题是在启动时评估约束,并且在测试数据库中当时没有城市。所以正则表达式看起来像 //,并且匹配所有内容。但是,当我尝试将其设为 Proc 或实现 #matches?(request) 的类时,它似乎永远不会被调用。
标签: ruby-on-rails routing ruby-on-rails-3 rspec constraints