button_to отправки формы работает в браузере, но не прошел тест rspec/capybara с ошибкой маршрутизации

Я пишу интеграционные тесты с использованием rspec и capybara для приложения rails4, которое охватывает существующую функциональность (я был ленив, когда впервые написал приложение). Следующая кнопка отправки работает правильно в браузере (Chrome) и перенаправляет на страницу успеха (как и ожидалось)

<div class="actions">
    <%= button_to "RSVP Now", new_event_attendee_path(f), :id => "open-contacts-dialog-btn", :class => "inbox-sf-add-btn tip", :style => "background:lightgreen" %>
</div>

Но следующий тест не проходит,

describe "should show confirmation message after submitting the form" do
  it "should go to success message when form submitted" do
    click_link 'See more details'
    click_button 'Sign Me Up!'
    fill_in 'Email', with: "simon@example.com"
    fill_in 'attendee_name', with: "Simon T"
    fill_in 'attendee_phone', with: "1234567890"
    fill_in 'attendee_num_guests', with: "1"
    click_on 'RSVP Now'
    page.should have_content("Awesome! You're signed up.")
  end
end

с ошибкой ниже:

Failure/Error: click_on 'RSVP Now'
 ActionController::RoutingError:
   No route matches [POST] "/events/%23%3CActionView::Helpers::FormBuilder:0x007ff9d7e003c0%3E/attendees/new"

Мои маршруты выглядят так: https://gist.github.com/srt32/6076872

Я немного растерялся, потому что с точки зрения пользователя действие работает, но я не могу заставить тест повторить поведение. Любая помощь будет оценена. Спасибо!

1 ответ

Решение

Вы хотите обычный тег отправки.

При использовании вспомогательного блока формы:

<%= f.submit "RSVP Now" %>

Или используйте автономный помощник по тегам:

<%= submit_tag "RSVP Now" %>

Прочитайте документацию о том, как button_to работает. Он в основном используется в качестве ссылок, которые должны POST, например, действия, которые каким-либо образом изменяют данные. Это не для использования с нормальными формами.

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