【问题标题】:[HTTP]how to change "www.example.com" to "localhost:3000"[HTTP]如何将“www.example.com”更改为“localhost:3000”
【发布时间】:2011-08-03 19:11:56
【问题描述】:

您好,我正在我的 Rails 应用程序中创建测试用黄瓜。在我的步骤场景中,我使用了 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|  }

未来:

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

步骤:

假设 /^one 用户以 admin$/ 身份登录
创建用户管理员
访问“/user_sessions/new”
fill_in 'user_session[login]', :with=>'siadmin'
填写 'user_session[密码]', :with=>'12345'
click_button '安梅尔登'
结束

给定 /^admin page$/ 做
需要“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

求助!!!

谢谢

【问题讨论】:

    标签: ruby-on-rails http cucumber


    【解决方案1】:
    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"
    

    ,当你扩展 ActionController::TestCase 时

    【讨论】:

      【解决方案2】:

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

      使用 Capybara 我们做到了:

      Capybara.default_host = "subdomain.yourapp.local"

      现在我们实际上使用了一个 Rack 中间件(仅在测试环境中:),它对应用程序的 env[HTTP_HOST] 进行了透明的更改,因此我们不必关心我们使用哪个测试框架/浏览器驱动程序。

      你使用什么框架?

      【讨论】:

      • 我使用了“rails”。我尝试设置 Capybara.default_host = "subdomain.yourapp.local" ini 测试环境,但还是不行?
      • 我们知道您使用 Rails。但是测试环境很重要。你说你用黄瓜。您可以发布用于运行它的功能和步骤定义吗?在黄瓜下面,您可以使用不同的测试框架进行实际测试。知道这一点很重要。否则我们帮不了你。
      • 哦.. 对不起,硒也许是你的意思,上面我放了未来和步骤
      • Abah:好的硒。但是你为什么要做所有 Net::HTTP 的事情呢?你想做什么?您可能想调用某个网址?但是你为什么不使用 selenium (visit(your_url_here)) 而不是 Net::HTTP。您进行了两次身份验证,并丢失了通过使用 selenium 登录获得的所有会话信息。请阅读有关 Selenium / Cucumber 的基础知识以及用户级测试的工作原理。为了解决您的重定向问题,我认为您必须添加另一块机架中间件来重写,以保存/恢复每个请求的 env[HTTP_HOST]。
      【解决方案3】:

      尝试将url 更改为path

      post some_admin_path, @params
      

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

      【讨论】:

      • path 使用相同的www.example.com 所以它不会工作。此外,在测试中使用http://localhost:3000 作为常量是一个坏主意。您永远不知道您的所有团队是否都使用端口 3000,或者他们是否使用 docker(并且需要除 localhost 之外的另一个 IP)。 Rails / 测试框架提供了改变这一点的方法。让我们避免这些黑客行为。
      猜你喜欢
      • 2020-05-21
      • 2018-03-28
      • 2020-10-12
      • 1970-01-01
      • 2023-01-18
      • 1970-01-01
      • 2019-03-05
      • 1970-01-01
      • 2019-07-07
      相关资源
      最近更新 更多