Rspec 3.6, ошибка Rails 5: неправильное количество аргументов (указано 2, ожидается 1) для запроса `post`

Я только что начал новый проект в Rails 5 (мой первый, хотя у меня есть несколько проектов в Rails 4.x.), и у меня проблемы со спецификациями контроллера.

describe RequestsController, :type => :controller do

  it "receives new request" do
    post :accept_request, my_params
  end

end

Возвращает ошибку:

 Failure/Error: post :accept_request, my_params

 ArgumentError:
   wrong number of arguments (given 2, expected 1)

Я понимаю, что произошла смена предпочтительной стратегии тестирования для контроллеров с Rails 5, как указано в Everyday Rails, в частности, перенос тестов контроллеров в спецификации запросов, но ничего не говорится об изменениях в этом базовом методе тестирования контроллеров.


person Nick    schedule 24.05.2017    source источник


Ответы (1)


Похоже, что Rails 5 ожидает аргументы ключевого слова вместо аргументов хэша, что является отличием от предыдущих версий. Кроме того, первый аргумент — это URL, а не действие. Пытаться

post some_url, params: some_hash
person zetetic    schedule 24.05.2017
comment
Потрясающий! Можете ли вы сказать мне, как вы нашли это? Или дополнительную документацию по аргументам ключевого слова? Я провел немало поисков, в том числе заметки об обновлении Rails и раздел GitHub Upgrading RSpec, но это все еще ускользало от меня. Просто некоторая помощь в том, как оставаться в курсе таких вещей, как это или другие тонкие обновления Rails 5. - person Nick; 25.05.2017
comment
Кроме того, FWIW, post по-прежнему принимает только действие, не требует URL-адреса. - person Nick; 25.05.2017
comment
Что касается того, как я это обнаружил, я несколько лет отвечал на вопросы о тестировании контроллеров, поэтому сразу понял, что это утверждение работало в предыдущих версиях. Это сузило его до изменения в Rails 5. Быстрый поиск привел к этому сообщению в блоге: blog.bigbinary.com/2016/04/19/, где упоминается переключение на аргументы ключевого слова. - person zetetic; 26.05.2017
comment
Отличная информация в этой статье, не знаю, как я ее пропустил. Благодарю вас! - person Nick; 26.05.2017
comment
Первый аргумент — это абсолютно не URL, это имя действия. Почему это принятый ответ? - person Andrew Koster; 26.09.2019
comment
@AndrewKoster см. github.com/rails /рельс/блоб/. Он принимает путь или URL. Руководство по тестированию Rails также использует URL в своих примерах. Начиная с Rails 5, тесты контроллера являются подклассами ActionDispatch::IntegrationTest. До Rails 5 они были производными от ActionController::TestCase, который принимал имя действия. - person zetetic; 27.09.2019
comment
Да, похоже, я работал с устаревшей документацией. Мы даже не должны больше использовать тесты контроллера, они были заменены тестами запросов (которые принимают URL в качестве первого аргумента). - person Andrew Koster; 27.09.2019