我使用Test :: Unit测试我的Rails应用程序。我经常碰到的问题是测试我的应用程序的路线,但我还没有找到解决方案。在Rails 3中测试子域约束路由
目前,我正在研究使用Basecamp风格子域名来区分帐户的应用程序。
有其需要的子域
constraints(SubdomainRoute) do
get "/login" => "user_sessions#new", :as => :login
get "/logout" => "user_sessions#destroy", :as => :logout
...
end
只能没有一个子域被访问
constraints(NoSubdomainRoute) do
match "/" => "public#index", :as => :public_root
match "/signup" => "public#signup", :as => :signup
...
end
类SubdomainRoute被定义为路线以及路线:
class SubdomainRoute
def self.matches?(request)
request.subdomain.present? && request.subdomain != "api" && request.subdomain != "www"
end
end
NoSubdomainRoute类正好相反。
路由按预期工作,但我如何测试那些使用Test :: Unit?
在功能测试,我可以这样做
assert_routing "/signup", :controller => "public", :action => "signup"
,但我不能提供一个子域,所以实际上是唯一的测试Rails内部它增加什么可测试我的应用程序。在这种情况下,我想测试的是使用或不使用子域时可以访问signup_path/signup_url。
在代码中,这样的事情
assert_raise(ActionDispatch::RoutingError) { get "http://account.test.host/signup" }
get "http://www.test.host/signup"
assert_response :success
GET在这种情况下,因为测试::单位把整个URL作为控制器的动作(...不起作用:动作=>“HTTP:// account.test.host/signup“)。
设置
@request.host = "subdomain.test.host"
只有在你内心的控制器代码的影响(例如,通过提取主机子域获得活期账户),但并不影响在这种情况下,路由。
我不知道集成测试中的情况是否有任何不同。
所以这两个主要问题是
- 当意味着路由进行一般testet?
- 如何他们测试关于这种特殊情况?
我williing尝试不同的方法(水豚和朋友),但我不希望我的切换测试框架(已经有了我的RSpec的时间),因为我,否则很高兴与测试::单元。
在此先感谢和亲切的问候!
感谢您的回复,但我的子域名已在使用 - 我的许多功能源于Ryan,但不幸的是,在此屏幕录像中,他没有关于测试的任何单词。 – 2011-06-18 09:18:24