我寫了大部分Rspec規範,但我面臨着一個重要問題。我在我所有的路由上設置了一個路由約束(這本身可能是有爭議的)。只有允許IP地址(存儲在單獨的IpAddress模型中)的管理員才能訪問我的應用程序中的某些區域。長話短說,我想模擬或存根我的約束模型,以便我可以自由地訪問我的規範中的所有內容。Rspec忽略路由約束
我的約束是這樣的:
class IpAddressConstraint
def initialize
@ips = IpAddress.select('number')
end
def matches?(request)
if @ips.find_by_number(request.remote_ip).present? || Rails.env.test? #<- temporary solution
true
else
if @current_backend_user.present?
backend_user_sign_out
else
raise ActionController::RoutingError.new('Not Found')
end
end
end
end
MyApp::Application.routes.draw do
constraints IpConstraint.new do
#all routes
end
end
什麼是我可以測試Rspec的該路由約束的最佳方式?目前我已經添加了一個條件,如果我在我的測試環境中,我可以完全跳過這些約束。如果我能以某種方式模擬這個約束,那會更好。
將127.0.0.1/32添加到允許的IPS列表中?假設你正在使用像水豚一樣的東西? – Doon 2013-02-08 15:34:47
我有一個IP的獨立模型,但只能通過登錄訪問。如果我可以編寫一個助手,我可以創建一個新的Ip_address.number(在我的情況下爲127.0.0.1),這將是很好的。儘管有這樣一個嚴格的限制,但這可能是一個糟糕的設計決定。 – 2013-02-08 15:43:19
你有一個稱爲IpAddress的IP模型。所有你需要做的就是像'IpAddress.create(number:'127.0.0.1')'在任何通過路由的規範之前。您不需要通過其控制器/等創建該對象/記錄。 – Doon 2013-02-08 15:51:47