Вебрат ищет действия, в которых он не нуждается

сценарий

У меня есть контроллер только с двумя действиями - :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 и попробуйте запустить тест с селеном. Поскольку селен фактически использует настоящий браузер, ваши спецификации должны работать.

Другие вопросы по тегам