[HTTP]如何将“www.example.com”更改为“localhost:3000”

时间:2011-04-12 11:05:41

标签: ruby-on-rails http cucumber

嗨,我在我的rails应用程序中创建测试使用黄瓜。在我的步骤场景中我使用了http basic authenticate,到目前为止它通过了基本的身份验证,但是当我想在控制器上调用方法并发布一些params时,我遇到了问题:

首先我在步骤中使用此代码,但未能与控制器上的方法交叉:

post some_admin_url, @params

第二我使用了这段代码,也失败了,错误是在运行URI.parse重定向到“www.example.com”时我想去“localhost:3000 / admin”,所以我可以匹配数据:

Net::HTTP.post_form(URI.parse(some_admin_url), {'from' => '2005-01-01','to' => '2005-03-31'}) { |i|  }

未来:

@selenium
  场景:管理员想要激活用户
    给定一个用户以admin身份登录     和管理员页面

步骤:

给出/ ^一个用户以admin $ / do登录     create_user_admin
    访问'/ user_sessions / new'
    fill_in'user_session [login]',:with =>'siadmin'
    fill_in'user_session [password]',:with =>'12345'
    click_button'Anmelden'
  结束

给定/ ^管理页面$ /做
    要求“net / http”
    要求“uri”

uri = URI.parse(user_action_admin_users_url)<br/>
http = Net::HTTP.new(uri.host, uri.port)<br/>
request = Net::HTTP::Get.new(uri.request_uri)<br/>
request.basic_auth("username", "password")<br/>
response = http.request(request)<br/>


enter code here

帮助!!!

感谢

3 个答案:

答案 0 :(得分:2)

fl00r的答案可能有效,但不会捕获重定向。 如果要捕获重定向,则必须在更高级别更改此设置。对于某些测试框架,有一种方法可以设置默认主机。

使用Capybara我们做到了:

Capybara.default_host = "subdomain.yourapp.local"

现在我们实际上使用Rack中间件(仅在测试环境中),更改为应用程序透明地更改env [HTTP_HOST],因此我们不必关心我们使用哪个testframework /浏览器驱动程序。

您使用什么框架?

答案 1 :(得分:0)

uname="myapp"
Capybara.default_host = "http://#{uname}.mywebsite.com:3000"
Capybara.server_port = 3000 # could be any of your choice
Capybara.app_host = "http://#{uname}.mywebsite.com:#{Capybara.server_port}" 

OR

request.host="www.myapp.com"

,当您扩展ActionController :: TestCase

答案 2 :(得分:-1)

尝试将url更改为path

post some_admin_path, @params

post "http://localhost:3000/#{some_admin_url}", @params