使用RSpec测试具有子域约束的路由

10

我在使用rspec路由测试时遇到了子域名约束的问题。

具体来说,我有一个路由:

constraints :subdomain => "api" do
  resources :sign_ups, :only => [:create]
end

包括但不限于一项测试

it "does allow creation of sign ups" do
  {:post => "/sign_ups"}.should route_to(
    :controller => "sign_ups",
    :action => "create",
  )
end
如果我删除子域名限制,这个测试就会通过,但是加上它就失败了。我必须告诉rspec使用子域名,但我不知道怎么做。
谢谢回答。
安迪
1个回答

30

通常我会这样做:

let(:url)     { "http://api.domain.com"     }
let(:bad_url) { "http://bad_url.domain.com" }

it "does allow creation of sign ups" do
  {:post => "#{url}/sign_ups"}.should route_to(
   :controller => "sign_ups",
   :action => "create",
  )
end

it "should not route" do
  {:post => "#{bad_url}/sign_ups"}.should_not route_to(
   :controller => "sign_ups",
   :action => "create",
  )
end

1
哎呀,如果你要更改一个现有的应用程序,这似乎是很多的工作。 - toxaq
很好,你知道如何通过这种方法设置 Accept 标头吗? - Ian Vaughan
在我的Rails 4应用程序中,使用当前的rspec无法正常工作。它需要进行额外的配置吗?我收到了一个错误:“没有匹配的路由<<url>>”。我使用了允许的子域名'lvh.me'和'local.dev'(最后一个是在我的/ etc / hosts文件中实现的)。 - Seb Wilgosz
1
修复 - URL末尾的斜杠是不允许的。 - Seb Wilgosz
针对Rails 4及更高版本的更新响应:https://dev59.com/DZjga4cB1Zd3GeqPK37q - Samuel Faure
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接