当我使用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'
我正在使用设计,你认为可能是因为那个吗?我有点迷茫,不知道从哪里开始看!
答案 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)