Ruby on rails [HTTP]如何更改";www.example.com“;至;本地主机:3000“;

Ruby on rails [HTTP]如何更改";www.example.com“;至;本地主机:3000“;,ruby-on-rails,http,cucumber,Ruby On Rails,Http,Cucumber,嗨,我在rails应用程序中创建测试使用cucumber。在我的step场景中,我使用了http基本身份验证,到目前为止它通过了基本身份验证,但当我想调用控制器上的方法并发布一些参数时,我遇到了问题: 首先,我在步骤中使用此代码,但在控制器上未能交叉到方法: post some_admin_url, @params 其次,我使用了这段代码,但也失败了,错误是在运行URI.parse重定向到“www.example.com”时,我想转到“localhost:3000/admin”,以便匹配数据:

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

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

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|  }
未来:

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

步骤:

给定/^一个用户以admin$/do登录
创建用户管理员
访问“/user\u sessions/new”
填写“用户会话[登录]”,:with=>“siadmin”
填写“用户会话[密码]”,:with=>“12345”
单击按钮“Anmelden”
结束

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/>
给定/^admin页面$/do
需要“网络/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/>
救命啊


谢谢

尝试将
url
更改为
path

post some_admin_path, @params


fl00r的答案可能有效,但无法捕获重定向。 如果你想捕捉重定向,你必须在更高的层次上改变它。对于某些测试框架,有一种方法可以设置默认主机

使用水豚,我们做到了:

Capybara.default\u host=“subdomain.yourapp.local”

现在我们实际上使用了一个机架中间件(仅在testenv中:),它可以透明地更改应用程序的env[HTTP_HOST],因此我们不必关心使用哪个testframework/browser驱动程序

你使用什么框架

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}" 


,当您扩展ActionController::TestCase时,我使用了“rails”。我试图设置Capybara.default\u host=“subdomain.yourapp.local”ini测试环境,但仍然不起作用?我们知道您使用Rails。但是测试环境很重要。你说你用黄瓜。您可以发布功能和用于运行它的步骤定义吗?下面,您可以使用不同的测试框架进行实际测试。这一点很重要。否则我们帮不了你哦。。对不起,硒也许你的意思是,我把未来和stepAbah放在上面:好的硒。但是为什么要做所有的Net::HTTP东西呢?你想干什么?您可能想调用某个url?但是为什么不使用selenium(访问(您的url)而不是Net::HTTP呢。您进行了两次身份验证,并且丢失了通过使用selenium登录获得的所有会话信息。请阅读有关硒/黄瓜的基础知识以及用户级测试的工作原理。为了解决重定向问题,我认为您必须添加另一个机架中间件,该中间件可以为每个请求保存/恢复env[HTTP_主机]。
path
使用相同的
www.example.com
,因此无法工作。另外,使用
http://localhost:3000
在测试中作为常量是个坏主意。您永远不知道您的团队是否都使用端口3000,或者是否使用docker(并且需要本地主机以外的另一个IP)。Rails/测试框架提供了改变这一点的方法。让我们避免这些黑客。
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}" 
request.host="www.myapp.com"