Я обновляю сайт Rails с 4.0 до 4.1.12, и теперь довольно много моих тестов контроллера Rspec. Например, этот тест порвал с обновлением:Update Test On Controller Breaks in Rails 4.1.12
it "update action should render edit template" do
@user = create(:user)
@user.name = "" # model requires name
@controller.stubs(:current_user).returns(@user)
put :update, id: @user
expect(response).to render_template(:edit)
end
Я не получаю «нет соответствующего маршрута {: действие =>» шоу»,: контроллер =>„счета“,: идентификатор => ноль} Отсутствуют необходимые ключи : [:Я бы]". Похоже, что метод update_attributes игнорирует мои проверки модели внезапно. Код
Контроллер:
def update
@user = current_user
if @user.update_attributes(params[:user])
redirect_to user_path(@user), :notice => "Your profile has been updated."
else
render :action => 'edit'
end
end
routes.rb
resources :users do
member do
get 'accounting'
end
collection do
post 'send_password'
end
end
Я уверен, что я пропустил что-то в процессе обновления, но я не вижу ничего в документации, что говорит мне что это такое.
Мы упускаем ваш 'routes.rb' –
Глядя на ошибку, что на самом деле маршрутизации на«шоу»не«обновление», как и Fire-Dragon-DoL говорит что нужно, чтобы увидеть ваши маршруты. Но моя первая мысль заключалась в том, что вы использовали «put» для обновления, а не для Rails 4 «patch». – Luke
Все еще можно сделать с большим количеством кода. Подойдя ближе к ошибке, она фактически маршрутизируется на учетные записи # show, и я предполагаю, что с маршрутов, которые вы указали, вы тестируете пользовательский контроллер. Итак, есть ли перенаправление (например, before_action), когда-то происходящее с контроллером пользователей? – Luke