Тестирование методов уничтожения с водосвинкой

Я написал несколько тестов с использованием Capybara, но я не использую селен и другие драйверы JS. Но я сомневаюсь, смогу ли я таким образом протестировать метод уничтожения? Поскольку мне нужно подтвердить подтверждение JS, а метод данных = "удалить" не может быть посещен...

Я хотел бы сделать что-то очень похожее на Capybara, например:

посетите '/people/123', :data-method => 'удалить'

Вы, ребята, знаете, есть ли какой-нибудь способ сделать это?

Заранее спасибо, Андре


person AndreDurao    schedule 03.05.2011    source источник


Ответы (2)


В Rails есть код JavaScript, который генерирует форму из атрибутов ссылки href и data-method и отправляет ее; это не будет работать без JS.

Один из способов проверить это: сначала проверьте наличие ссылки и правильных атрибутов (href, data-method), затем инициируйте запрос на удаление вручную с помощью Capybara::RackTest::Driver#delete метод. Если вы делаете это часто, напишите вспомогательный метод, обертывающий эти два шага.

person Mike Mazur    schedule 03.05.2011
comment
Спасибо за Ваш ответ. Кроме того, я нашел сообщение в блоге о той же проблеме (blog.ardes.com/2010/4/28/), и ему удалось решить эту проблему с помощью следующих строк: ) - person AndreDurao; 10.05.2011

Просто кое-что, о чем следует знать с ответом @Mike Mazur: если ваш контроллер выполняет перенаправление действия #destroy, вызов метода удаления в драйвере Capybara фактически не следует за перенаправлением. Вместо этого он просто заполняет response сообщением о перенаправлении, то есть body == <html><body>You are being <a href=\"http://www.example.com/model_names\">redirected</a>.</body></html> и status_code == 302.

Таким образом, чтобы заполнить все, как вы ожидаете на обычном Capybara click_button 'Delete Model', вам нужно будет вручную выполнить перенаправление. Один (нерефакторинговый и со вкусом RSpec) способ сделать это:

Capybara.current_session.driver.delete controller_path(model_instance)
Capybara.current_session.driver.response.should be_redirect
visit Capybara.current_session.driver.response.location
person DangerDave    schedule 14.02.2013
comment
вау это идеально. Спасибо. По какой-то причине вы указываете Capybara.current_session, а не просто используете страницу? - person davekaro; 01.03.2013