rspec не видит поля, динамически добавляемые или удаляемые коконом во вложенной форме

В моем приложении на Rails 4 я использую Cocoon для вложенных форм.

Он хорошо работает в браузере, но я хочу добавить несколько тестов с помощью rspec.

Если я сделаю click_link("add") (или «удалю») в своем тесте, rspec не увидит никаких изменений (я печатаю page.body до и после).

Я также пробовал с sleep(10), но это то же самое.

Как я могу проверить, хорошо ли работает действие (добавить или удалить вложенную форму)?

Спасибо

РЕДАКТИРОВАТЬ:

Сценарий для тестирования:

scenario "nested form" do
  user_sign_in

  contact = FactoryGirl.create(:contact)

  visit new_message_path
  expect(page).to have_text("New message")

  puts page.html

  click_link('Add an action')  # <------ click on the link to add a new nested form

  puts page.html     # <--- the page is the same as before the click

  expect(page).to have_text("New action")

  user_sign_out
end

person Fred Perrin    schedule 26.06.2014    source источник
comment
Можете ли вы опубликовать весь свой сценарий? Вы прошли js: true как вариант соответствующего теста?   -  person Chris Peters    schedule 26.06.2014
comment
@ChrisPeters Спасибо. Вы правы, я не передаю вариант js: true. Я этого не знал. буду смотреть в этом направлении. Спасибо еще раз   -  person Fred Perrin    schedule 27.06.2014
comment
Да, вам понадобится камень selenium-webdriver или capybara-webkit. У меня сложилось впечатление, что с первым легче начать работать.   -  person Chris Peters    schedule 27.06.2014
comment
@ChrisPeters: спасибо за все! Если вы напишете ответ с js: true, я его приму.   -  person Fred Perrin    schedule 27.06.2014
comment
Добавил ответ. Рад, что ты разобрался.   -  person Chris Peters    schedule 28.06.2014


Ответы (1)


Если вы хотите протестировать функциональность, связанную с JavaScript, вам нужно передать js: true в качестве опции для соответствующих scenario:

scenario "nested form", js: true do
  user_sign_in
  contact = FactoryGirl.create(:contact)

  visit new_message_path
  expect(page).to have_text("New message")

  click_link('Add an action')
  expect(page).to have_text("New action")

  user_sign_out
end

Для этого вам также понадобятся камни selenium-webdriver или capybara-webkit. У меня сложилось впечатление, что с Selenium проще начать, но WebKit работает намного быстрее.

Обратите внимание, что вы также можете передать js: true в feature, context или describe, если вам нужно протестировать несколько scenario с помощью JavaScript.

person Chris Peters    schedule 27.06.2014
comment
Спасибо, Крис, это было именно так. js: true пропал. Спасибо также за все советы, очень подробно. - person Fred Perrin; 29.06.2014