rails root_url将我重定向到www.example.com

时间:2018-03-10 22:20:03

标签: ruby-on-rails debugging model-view-controller ruby-on-rails-5

当我使用rails test执行测试时,我收到了一些非常奇怪的东西。

我正在尝试理解并创建我的第一个控制器测试,我得到了一些意想不到的东西。

我在控制台中收到此错误:

F

Failure:
FeedbacksControllerTest#test_should_create_resource [/Users/Daniel/GitHub/haeapua-rails/test/controllers/feedbacks_controller_test.rb:15]:
Expected response to be a <2XX: success>, but was a <302: Found> redirect to <http://www.example.com/>
Response body: <html><body>You are being <a href="http://www.example.com/">redirected</a>.</body></html>

这是我的测试

test "should create resource" do

  assert_difference 'Feedback.count', 1 do 
    post feedbacks_url, params: { feedback: { email: "me@myemail.com", summary: "my feedback", rating: 5 } }
  end

  assert_response :success
  assert_redirected_to root_url
end

这是我的控制器

class FeedbacksController < ApplicationController

  # GET /feedbacks/new
  def new
    @feedback = Feedback.new
    # @feedback.user = current_user if user_signed_in?
  end

  # POST /feedbacks
  def create
    @feedback = Feedback.new(feedback_params)
    # @feedback.user = current_user if user_signed_in?

    if @feedback.save
      # flash[:info] = "We got it, thanks. Someone will contact you ASAP once we read it"
      redirect_to root_url
    else
      render :new
    end
  end

  private
    def feedback_params
      params.require(:feedback).permit(:email, :summary, :rating)
    end
end

当我在redirect_to之前在反馈控制器中放入“puts root_url”时,我得到值"http://www.example.com/"。我在我的整个代码中搜索root_url,我拥有的唯一部分是在Controller和我的路线中root to: 'static_pages#concept'

我正在使用设计,你认为可能是因为那个吗?我有点迷茫,不知道从哪里开始看!

2 个答案:

答案 0 :(得分:0)

也许某些默认配置正在设置此值。 https://github.com/teamcapybara/capybara/blob/master/lib/capybara.rb#L452

Capybara.configure do |config|
  # ...
  config.default_host = "http://www.example.com"
  # ...
end

您必须在项目配置中覆盖此设置。

如果它不是水豚,那可能是铁轨问题?从这个帖子https://github.com/rspec/rspec-rails/issues/1275的输入我会尝试这样的东西

# config/environment/test.rb
config.action_controller.default_url_options = {
  host: '0.0.0.0:3000' # or whatever your host is
}

在我发现的帖子中:

# putting this into initializer of test framework
[ApplicationController, ActionController::Base].each do |klass|
  klass.class_eval do
    def default_url_options(options = {})
      { :host => "example.com" }.merge(options) # or localhost:8888 or 0.0.0.0:3000 or whatever your server is
    end
  end
end

答案 1 :(得分:0)

这是一个奇怪的怪癖但是rails有两种类型的url_helpers用于路由。 something_url和something_path。第一个是绝对路径,http://www.awesome.com/something)第二个是相对路径(/ someurl)。

除非您在测试环境中明确设置了域名,否则请在测试中使用_path帮助程序。如果要使用_url助手,则需要在应用程序的测试环境中配置基本URL(config / environments / test.rb)