8

Url 助手(例如 root_url)在应用程序控制器与 rspec 示例中返回不同的主机名。我已经成功地能够在我的 rails 应用程序中为 url 助手设置域,如下所示:

class ApplicationController < ActionController::Base
  def default_url_options
    {host: "foo.com", only_path: false}
  end
end

例如,root_url 在应用程序中输出“http://foo.com/”,但在我的请求规范中输出“http://example.com”。在 rails 3.2 中全局应用这些 url 选项以影响我的规范的推荐方法是什么?url 选项不需要是动态的。

4

4 回答 4

6

在功能规格中,主机!已被弃用。将这些添加到您的 rspec_helper.rb:

# Configure Capybara expected host
Capybara.app_host = 'http://lvh.me:3000'

# Configure actual routes host during test
before(:each) do
  if respond_to?(:default_url_options)
    default_url_options[:host] = 'http://lvh.me:3000'
  end
end
于 2015-02-23T21:28:50.347 回答
4

只是为了添加到 Dan 的答案中,它在 spec_helper.rb 中看起来像这样

RSpec.configure do |config|
  # other config options
  config.before(:each) do
    host! "localhost:3000"
  end
end
于 2013-11-21T18:55:04.880 回答
2

您可以在 rspec 的测试中将主机设置在 before 块中:

    before :each do
      host! 'hostgoeshere.com'
    end

如果你想全局设置它,你可以放一些你的 spec_helper.rb 文件。

于 2012-08-17T01:31:59.733 回答
1

作为控制器测试和功能测试,我尝试了 , 的许多变体@request.host,但均未成功。非常令人恼火,因为许多其他人报告说这些方法取得了成功。host!post path, args, {'SERVER_NAME' => my_secret_domain}

我的解决方案是:

request.headers["SERVER_NAME"] = my_secret_domain
post path, args

我正在运行 ruby​​ 2.1.5p273、rspec 3.1.7 和 Rails 4.2.0

于 2015-04-08T20:43:59.870 回答