Cho một vài thành phố ở DB:Làm thế nào để bạn kiểm tra các ràng buộc tuyến đường sử dụng RSpec
City.first.attributes => {:id => 1, :name => 'nyc'}
City.last.attributes => {:id => 2, :name => 'boston'}
Và một tuyến đường như:
match '/:city/*dest' => 'cities#do_something', :constraints => {:city => /#{City.all.map{|c| c.name}.join('|'}/}
(nên hạn chế nên đánh giá để:/nyc | boston /)
Và một spec:
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
Tôi mong đợi một thất bại. Nhưng nó trôi qua.
Tương tự như vậy:
it "doesn't route bad city names" do
{ :put => '/some-bad-city/some/path' }.should_not be_routable
end
Ở đây tôi mong đợi nó để vượt qua, nhưng nó không thành công.
Dường như ràng buộc bị bỏ qua trong thông số kỹ thuật, vì các thành phố phù hợp có hành vi tương tự như hành vi xấu.
Đây có phải là vấn đề đã biết hay tôi đang thiếu điều gì đó mà tôi cần phải làm?
Bởi vì điều này làm việc trong dev, nhưng không thử nghiệm, tôi nghĩ vấn đề là ràng buộc được đánh giá lúc khởi động, và trong DB thử nghiệm không có thành phố tại điểm đó. Vì vậy, regex trông giống như // và khớp mọi thứ. Nhưng khi tôi cố gắng để làm cho nó một Proc, hoặc một lớp thực hiện #matches? (Yêu cầu) nó dường như không bao giờ được gọi. –