子域,使用黄瓜或水豚和rspec进行测试

Ani*_*uja 4 cucumber capybara rspec-rails ruby-on-rails-3

我的项目开发的一部分已经完成.我们公司要求我为开发的代码和今后的开发编写黄瓜测试用例.routes文件有两个子域用于admin和hosts.Devise也在使用中.

现在我安装了黄瓜并为第一个故事写了第一个场景,当未注册的用户登陆主页,输入有效的电子邮件并被重定向到下一页......页面没有密码字段.

Scenario: Non registered user lands on beta home page. 
Given: I am on the homepage 
When: I enter valid email with "bahubalian...@gmail.com". 
Then: I should be redirected to request invitation page. 
Run Code Online (Sandbox Code Playgroud)

问题出在我的路线文件中,我有,

constraints :subdomain => ADMIN_SUBDOMAIN do 
  .... 
  root :to => admin#index 
end 
constraints :subdomain => HOST do 
  ... 
  root :to => home#index. 
end 
Run Code Online (Sandbox Code Playgroud)

现在,我如何指定path.rb文件以查找该特定子域中的root_path.没有root_path写在子域约束之外.这是我第一次参加测试.我真的很坚持这一点.非常感谢任何帮助.

我只是从某人那里得知,这可以用capybara来实现.如果是这样,你能不能对它有所了解.

Ani*_*uja 6

原来它非常简单.Capybara提供了default_host方法.所以我只需要提一下,

When I visit subomain sub
Run Code Online (Sandbox Code Playgroud)

然后是webstep


Given /^I visit subdomain (.*)$/ do |site_domain|

  site_domain = "http://sub.example.com" if site_domain == "admin"

  Capybara.default_host = site_domain
  visit "/"
end
Run Code Online (Sandbox Code Playgroud)

更新:

不应该使用default_host,因为文档中没有提到它.而是尝试在访问中使用绝对路径.

Given /^I visit subdomain (.*)$/ do |site_domain|

  site_domain = "http://sub.example.com" if site_domain == "admin"
  visit site_domain
end
Run Code Online (Sandbox Code Playgroud)