Я получаю что-то действительно странное, когда выполняю свои тесты с 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: "[email protected]", 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
Когда я помещаю «устанавливает root_url» в свой контроллер обратной связи непосредственно перед redirect_to, я получаю значение "http://www.example.com/". Я ищу root_url во всем своем коде, и единственная его часть находится в контроллере и в моих маршрутах root to: 'static_pages#concept'.
Я использую devise, как вы думаете, это могло быть из-за этого? Я немного растерялся и не знаю, с чего начать!
Да, драгоценный камень у меня установлен. Хм, займусь завтра.





Возможно, какая-то конфигурация по умолчанию устанавливает это значение. 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
Я прокомментировал Gem в m Gemfile, но он все равно это делает. Я до сих пор не могу понять, где это значение определено. Это должно быть где-то ...
только будьте уверены, вы $ bundle install после того, как прокомментировали это?
Странная причуда, но у rails есть два типа url_helpers для маршрутов. something_url и something_path. Первый - абсолютный путь, http://www.awesome.com/something), второй - относительный путь (/ someurl).
Если в вашей тестовой среде явно не задано доменное имя, используйте в тестах помощники _path. Если вы хотите использовать помощники _url, вам необходимо настроить базовый URL-адрес в тестовой среде вашего приложения (config / environment / test.rb)
Я знаю о _path и _url. Но ваш ответ не объясняет, почему у меня по умолчанию установлен example.com.
ну, возможно, вы о них знаете, но вы используете _url в своих тестах с assert redirected_to root_url вместо root_path, и у вас нет домена, установленного в вашей среде. stackoverflow.com/a/48865478/793330
Не могли бы вы рассказать, что в этом плохого?
вы используете капибару?