Вебрат ищет действия, в которых он не нуждается
сценарий
У меня есть контроллер только с двумя действиями - :create
а также :delete
, Где действие создания определяется так:
def create
# some code...
if @thing.save
redirect_to :back, :notice => "Successfully created."
else
redirect_to :back, :notice => "Successfully deleted."
end
end
Я ссылаюсь на действие, используя...
<%= link_to "Become a friend", things_path(...), :method => :post %>
... в представлении.
проблема
Это прекрасно работает, когда я взаимодействую с приложением в моем браузере. Однако я хочу протестировать эту функциональность, используя интеграционное тестирование RSpec, используя вспомогательный метод Webrat - click_link "Become a friend"
- который я считаю правильным. Но я получаю эту ошибку
Failure/Error: click_link "I like Person-1's taste"
AbstractController::ActionNotFound:
The action 'index' could not be found for ThingsController
Я могу создать пустое действие index в контроллере Things, но это нарушит принцип KISS.
Вопросы
Как я могу обойти / исправить это? И есть ли лучшие практики для подобных случаев?
1 ответ
Проблема в том, что:method =>:post заставляет рельсы создавать форму, которая затем отправляется при нажатии на ссылку. Это работает только с включенным JavaScript, который вебрат не поддерживает из коробки. Загляните на https://github.com/brynary/webrat/wiki и попробуйте запустить тест с селеном. Поскольку селен фактически использует настоящий браузер, ваши спецификации должны работать.